我们处于一个混合的环境中,我们的应用程序使用ADO.NET和实体框架。
由于两者都指向相同的物理SQL服务器,我们希望从配置文件中删除实体框架连接字符串,然后根据当前的ADO.NET连接字符串自动生成字符串。
这节省了我们的开发人员更改ADO.NET字符串但忘记更改实体框架连接字符串的错误。实体框架6设置连接字符串运行时间
我已经读过这个,但他们没有回答这个问题。
How do I create connection string programmatically to MS SQL in Entity Framework 6?
如果我创造我自己的DbConnection并传递到的DbContext(existingConnection,contextOwnsConnection),那么它抛出一个错误“的情况下被以代码优先模式下的代码是从一个EDMX文件生成的使用,也可以数据库优先或模型优先开发“。
我没有使用Code First。
https://msdn.microsoft.com/en-us/data/jj680699
这谈起代码库配置EF 6,但文章并不表明实际上改变了连接字符串的任何代码。
更新:更多信息,以帮助澄清我的问题。
我没有先使用代码,并想在配置文件之外建立连接字符串。
我正在使用的DbContext是T4模板生成的自动生成的DbContext文件的部分类。
我的印象是,我需要创建一个继承的DbConfiguration类,并在该类中执行某些操作,但我发现的唯一示例是使用Azure。
https://msdn.microsoft.com/en-us/data/jj680699
有一篇关于Code Project的文章,讲述了在运行时设置连接字符串,但文章基于每次创建新实体容器时都创建连接字符串。
http://www.codeproject.com/Tips/234677/Set-the-connection-string-for-Entity-Framework-at
我想能够使用我的部分DbContext类创建连接字符串,以便调用者不必做任何特殊的事情。
更新:工作代码用于运行时间而不是设计时
使用张贴@Circular参考“下面列出的”代码,我能更改连接字符串,而不改变我的实体类的电话,但这个不起作用用于DesignTime EDMX文件。
public partial class TestEntities : DbContext
{
public TestEntities() : base(GetSqlConnection(), true)
{
}
public static DbConnection GetSqlConnection()
{
// Initialize the EntityConnectionStringBuilder.
EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
var connectionSettings = ConfigurationManager.ConnectionStrings("Current_ADO_Connection_In_Config");
// Set the provider name.
entityBuilder.Provider = connectionSettings.ProviderName;
// Set the provider-specific connection string.
entityBuilder.ProviderConnectionString = connectionSettings.ConnectionString;
// Set the Metadata location.
entityBuilder.Metadata = "res://*/Models.TestModel.csdl|res://*/Models.TestModel.ssdl|res://*/Models.TestModel.msl";
return new EntityConnection(entityBuilder.ToString());
}
}
现在,如果我可以只是得到DesignTime的工作,那很好。
我想你会使用的ObjectContext inste DbContext的广告,因为您没有使用Code First。我不是100%确定这种关系。这提示:https://msdn.microsoft.com/en-us/library/bb738461(v=vs.110).aspx并从此处链接描述创建连接:https://msdn.microsoft.com /en-us/library/bb738533%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396 – AaronLS 2015-04-03 22:26:36
CodeFirst的连接字符串通常是标准连接字符串,其中非CodeFirst的连接字符串通常是对csdl/ssdl/msl文件。 – AaronLS 2015-04-03 22:27:55