如何创建Entity Framework ObjectContext?

5
我在一个SQL服务器上有许多数据库。我将连接字符串作为模板(查看Initial Catalog={0})放入web.config中。
我想要使用正确的连接字符串创建对象上下文。我希望通过以下方式实现:CreatObjectContext<SiteEntities>('MySite'),但是我收到错误消息: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);           
}

我做错了什么?我如何创建上下文?
2个回答

4
如果您使用EntityConnectionStringBuilder,则只需要将sqlserver连接字符串存储在web.config中。 EntityConnectionStringBuilder可以将这些转换为EF4连接字符串。
示例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>

我们可以将您的方法更改为以下内容:

然后我们可以将您的方法更改为以下内容:

(注意保留HTML标记)
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());          
}

相关问题:entity-framework-runtime-connection-string https://dev59.com/6mgu5IYBdhLWcg3wYGC3 - Michael Freidgeim

2

我只是想分享一个小类,它可以使用实体类作为T类型来创建实体框架连接,使用SQL连接字符串和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;

    }

}

使用示例:

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

我也使用了这篇帖子来整合所有东西:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接