实体框架 - 数据库优先没有配置

时间:2013-02-20 15:39:44

标签: entity-framework entity-framework-5

我正在开发一个使用EF处理现有数据库的类库。我想避免类库(和.exe或网站)的使用者在* .config文件中包含实体连接字符串。我希望连接字符串设置为运行时。

如何使用Database First方法设置连接字符串?没有构造函数重载接受连接字符串,当我创建一个(在一个单独的部分类中)时,我得到了“UnintentionalCodeFirstException”。

我已经审核了以下链接:

1 个答案:

答案 0 :(得分:6)

DbContext上有一个带有DbConnection的构造函数,你需要为它使用一个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
}

需要注意的重要一点是元数据部分 - 显然需要为模型名称替换“Model1”。

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

EDIT 20/02/2013 22:25

所以作为一个补充,你需要扩展创建的DbContext类,使用一个部分类来添加一个构造函数来支持上面的代码,如下所示:

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

此类需要与实体框架向导生成的DbContext位于同一名称空间中。