5

Tôi có nhiều DB trong một máy chủ SQL. Tôi đã đặt connectionString làm mẫu (xem Initial Catalog={0}) vào web.config.Làm thế nào để tạo Entity Framework ObjectContext?

<add name="ent" connectionString="metadata=res://*/ent.csdl|res://*/ent.ssdl|res://*/ent.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=1.1.1.1;Initial Catalog={0};Persist Security Info=True;User ID=user;Password=pass;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Tôi muốn tạo ObjectContext với connectionString đúng. Tôi đã nghĩ như sau, CreatObjectContext<SiteEntities>('MySite') nhưng tôi gặp lỗi Unable to determine the provider name for connection of type 'System.Data.EntityClient.EntityConnection'.

public T CreatObjectContext<T>(string dbName) where T : ObjectContext, new() 
{   
     var conStr = ConfigurationManager.ConnectionStrings["ent"].ConnectionString; 
     var entityBuilder = new EntityConnectionStringBuilder(conStr); 
     entityBuilder.Provider = "System.Data.SqlClient"; 
     // Build correct conString to the db 
     entityBuilder.ProviderConnectionString = string.Format(entityBuilder.ProviderConnectionString, dbName); 

     var connection = new EntityConnection(entityBuilder.ConnectionString);       
     var builder = new ContextBuilder<T>(); 

     return builder.Create(connection);   
} 

Tôi đang làm gì sai? Làm thế nào tôi có thể tạo ra bối cảnh?

Trả lời

4

Nếu bạn đang sử dụng EntityConnectionStringBuilder, bạn chỉ cần lưu trữ chuỗi kết nối sqlserver trong web.config của mình. EntityConnectionStringBuilder sau đó có thể chuyển đổi chúng thành chuỗi kết nối EF4.

Ví dụ web.config

<connectionStrings> 
     <add name="db1" connectionString="data source=localhost\SQLEXPRESS;initial catalog=db1;integrated security=True;multipleactiveresultsets=True;App=EntityFramework" /> 
     <add name="db2" connectionString="data source=localhost\SQLEXPRESS;initial catalog=db2;integrated security=True;multipleactiveresultsets=True;App=EntityFramework" /> 
    </connectionStrings> 

Và chúng ta có thể thay đổi phương pháp của bạn để một cái gì đó như:

public ObjectContext CreatObjectContext(string dbName) 
{   
     var conStr = ConfigurationManager.ConnectionStrings[dbName].ConnectionString; 
     var entityBuilder = new EntityConnectionStringBuilder(); 

     entityBuilder.Provider = "System.Data.SqlClient"; 
     entityBuilder.ProviderConnectionString = conStr; 

     entityBuilder.MetaData = @"res://*/ent.csdl|res://*/ent.ssdl|res://*/ent.msl"; 

     return new ObjectContext(entityBuilder.ToString());   
} 
+0

câu hỏi liên quan tổ chức-framework-runtime-kết nối chuỗi http://stackoverflow.com/ câu hỏi/11368897/entity-framework-runtime-connection-string –

2

Tôi chỉ muốn chia sẻ một lớp học nhỏ để tạo ra một kết nối khuôn khổ tổ chức sử dụng các lớp thực thể dưới dạng T chuỗi kết nối SQL và tên dữ liệu meta entityModel.

public static class EFConnection<T> where T : ObjectContext 
    { 
    public static T GetDatabase(string connectionString,string entityModelMetadataName) 
    { 

     var entityBuilder = new EntityConnectionStringBuilder(); 
     entityBuilder.Provider = "System.Data.SqlClient"; 
     entityBuilder.ProviderConnectionString = connectionString; 
     entityBuilder.Metadata = @"res://*/" + entityModelMetadataName + ".csdl|res://*/" + entityModelMetadataName + ".ssdl|res://*/" + entityModelMetadataName + ".msl"; 


    var _db=(T)Activator.CreateInstance(typeof(T), new object[] { entityBuilder.ToString()}); 
    return _db; 

    } 

} 

sử dụng ví dụ:

var _db = EFConnection<Model1Container>.GetDatabase(Settings.General.Default.DatabaseConnectionString, "Model1"); 

tôi đã sử dụng this bài cũng để đưa mọi thứ với nhau:

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