实体框架 - 数据库首先没有配置(Entity Framework - Database First

2019-07-20 05:22发布

我正在开发一个类库,使用EF退出的分贝交易。 我想避免的类库(和.exe或网站)的消费者有* config文件的实体连接的字符串中。 我想连接字符串设定的运行时间。

如何设置与数据库优先方式连接字符串? 有没有构造函数重载接受一个连接字符串,当我创建了一个(在一个单独的部分类)我得到了一个“UnintentionalCodeFirstException”。

我已经审查了以下链接:

  • 有没有办法先更改连接字符串中的数据库? 。 它关于修改配置文件中的连接字符串,这是我想要避免,也因为它会循环的过程(在Web应用程序的情况下)
  • l如何可以使用实体框架没有App.config中 。 不是很好,因为它使用的ObjectContext,我需要的时候我导入了数据库产生的背景。

Answer 1:

还有就是需要的DbConnection上的DbContext一个构造函数,你需要使用一个EntityConnection对象吧:

SqlConnectionStringBuilder sqlBuilder = new SqlConnectionStringBuilder();

// Set the properties for the data source.
sqlBuilder.DataSource = "server name";
sqlBuilder.InitialCatalog = "database name";
sqlBuilder.IntegratedSecurity = true;

// Build the SqlConnection connection string.
string providerString = sqlBuilder.ToString();

var entityBuilder = new EntityConnectionStringBuilder();

// Initialize the EntityConnectionStringBuilder.
//Set the provider name.
entityBuilder.Provider = "System.Data.SqlClient";

// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = providerString;

// Set the Metadata location.
entityBuilder.Metadata = @"res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl";

using(var context = new YourDbContext(entityBuilder.ToString())){
    //do stuff here
}

需要注意的重要一点是元数据的一部分 - “型号1”显然需要更换的型号名称。

参考: http://msdn.microsoft.com/en-us/library/bb738533.aspx

编辑20/02/2013 22:25

因此,作为一个除了你就需要使用,增加了一个构造函数,支持上面的代码,这样的局部类扩展创建的DbContext类:

public partial class YourDbContext
{
    public YourDbContext(string connection) : base(connection) {}
}

这个类需要是在相同的命名空间的DbContext由所述实体框架向导生成。



文章来源: Entity Framework - Database First without config