8

Tôi không thể thực hiện di chuyển cho một trường hợp cụ thể.Di chuyển khung thực thể - hỗ trợ chuỗi kết nối động

Ứng dụng của chúng tôi sử dụng hai mô hình khác nhau. Đầu tiên là cho cơ sở dữ liệu chính và ở đó, việc di chuyển đang hoạt động tốt. Mô hình thứ hai là dành cho các cơ sở dữ liệu khách hàng của chúng tôi dành riêng cho từng khách hàng (tất nhiên ...) nhưng tất cả đều có chung một mô hình.

Vì vậy, trong ứng dụng (ASP.Net MVC 3), chúng tôi xác định khách hàng sử dụng tuyến đường và tất cả khách hàng được lưu trữ trong cùng một ứng dụng. Vì vậy, đối với mỗi yêu cầu, chúng tôi chuyển một khóa cho mô hình trình tạo mô hình khách hàng dbContext của chúng tôi và với khóa đó, chúng tôi khôi phục chuỗi kết nối thông qua một phương thức trợ giúp đơn giản.

Ứng dụng này hoạt động tốt nhưng không phải là di chuyển vì tôi không tìm thấy cách nào để chuyển khóa trong Bảng điều khiển Trình quản lý gói.

Tôi đã cố gắng tạo IDbConnectionFactory của riêng mình nhưng không được tính đến.

Nếu tôi thử một lệnh cập nhật cơ sở dữ liệu với các nhà máy kết nối tôi nhận được lỗi sau đó là bình thường vì không có chìa khóa đang trôi qua nhưng tôi có thể thấy rằng nhà máy kết nối của tôi được đá ở (EFCustomerModel.EFConnectionFactory):

PM> update-database -verbose 
Using NuGet project 'EFCustomerModel'. 
Using StartUp project 'PMEL.DatabaseSetup'. 
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0. 
    at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue) 
    at System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) 
    at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) 
    at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) 
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(String connectionString, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) 
    at System.Data.SqlClient.SqlConnection.ConnectionString_Set(String value) 
    at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) 
    at System.Data.SqlClient.SqlConnection..ctor(String connectionString) 
    **at EFCustomerModel.EFConnectionFactory.CreateConnection(String nameOrConnectionString) in C:\...\EFCustomerModel\EFConnectionFactory.vb:line 18** 
    at System.Data.Entity.Internal.LazyInternalConnection.Initialize() 
    at System.Data.Entity.Internal.LazyInternalConnection.get_Connection() 
    at System.Data.Entity.Internal.LazyInternalContext.get_Connection() 
    at System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType, DbProviderInfo modelProviderInfo, AppConfig config, DbConnectionInfo connectionInfo) 
    at System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType) 
    at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext) 
    at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration) 
    at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator() 
    at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() 
    at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() 
Format of the initialization string does not conform to specification starting at index 0. 

Nhưng khi tôi cố gắng vượt qua trong chìa khóa của tôi bằng cách sử dụng tham số -ConnectionString, sau đó nhà máy kết nối của tôi được bỏ qua và tôi nhận được lỗi tương tự:

PM> update-database -verbose -ConnectionString:CC99999 -ConnectionProviderName:System.Data.SqlClient 
Using NuGet project 'EFCustomerModel'. 
Using StartUp project 'PMEL.DatabaseSetup'. 
System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0. 
    at System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue) 
    at System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) 
    at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) 
    at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) 
    at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) 
    at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(String connectionString, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) 
    at System.Data.SqlClient.SqlConnection.ConnectionString_Set(String value) 
    at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) 
    at System.Data.Entity.Internal.LazyInternalConnection.InitializeFromConnectionStringSetting(ConnectionStringSettings appConfigConnection) 
    at System.Data.Entity.Internal.LazyInternalConnection.Initialize() 
    at System.Data.Entity.Internal.LazyInternalConnection.get_Connection() 
    at System.Data.Entity.Internal.LazyInternalContext.get_Connection() 
    at System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType, DbProviderInfo modelProviderInfo, AppConfig config, DbConnectionInfo connectionInfo) 
    at System.Data.Entity.Infrastructure.DbContextInfo..ctor(Type contextType, DbConnectionInfo connectionInfo) 
    at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration, DbContext usersContext) 
    at System.Data.Entity.Migrations.DbMigrator..ctor(DbMigrationsConfiguration configuration) 
    at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.GetMigrator() 
    at System.Data.Entity.Migrations.Design.ToolingFacade.UpdateRunner.RunCore() 
    at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run() 
Format of the initialization string does not conform to specification starting at index 0. 

Vì vậy, đây là một kịch bản được hỗ trợ trong các cuộc di cư hoặc có là một cách khác để vượt qua hoặc có thể có một cách khác để tạo chuỗi kết nối của tôi?

Cảm ơn,

+0

Vì vậy, tôi để mất bất kỳ hy vọng! ;-) – jjslagace

+0

Bạn có tìm được giải pháp không? – Alireza

Trả lời

3

Bạn sẽ có thể vượt qua một chìa khóa để nhà máy kết nối tùy chỉnh của bạn với các thông số -ConnectionStringName. Tham số này sẽ được chuyển đến phương thức CreateConnection.

Một giải pháp khả thi sẽ được gọi DB di cư từ mã của bạn:

var configuration = new Configuration(); 
configuration.TargetDatabase = new DbConnectionInfo(
    "Server=MyServer;Database=MyDatabase;Trusted_Connection=True;", 
    "System.Data.SqlClient"); 

var migrator = new DbMigrator(configuration); 
migrator.Update(); 
+0

Cảm ơn, tôi đã thử với tham số -ConnectionStringName nhưng có lẽ tôi nên thử lại với phiên bản 5. – jjslagace

+0

Nop, điều này không hoạt động và hàm tạo DbMigrator không thành công, phàn nàn về việc thiếu hàm tạo mặc định và IdbContextFactory <>. – Alireza

Các vấn đề liên quan