我已经使用 EF 5 和 Model First 方法创建了一个 EDMX,即我从一个空白设计器开始并为我的实体建模。现在我希望能够使用在 EDMX 中定义的这个模型,但提供运行时 SQL Server 连接字符串,而无需修改配置文件。
我知道如何将连接字符串传递给 DbContext,但问题是在程序集中定位映射的元数据。
例如,我的 EDMX 在 app.config 中有这个连接字符串
<add name="MesSystemEntities" connectionString="metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;provider=System.Data.SqlClient;provider connection string="data source=MyMachine;initial catalog=MesSystem;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
我缺少的部分是"metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;"
我希望能够以DbContext
编程方式创建一个传入 SQL Server 连接字符串但“添加”元数据部分的方法。
这就是我希望由 T4 文件生成的...
public partial class MesSystemEntities : DbContext
{
public MesSystemEntities()
: base("name=MesSystemEntities")
{
}
public MesSystemEntities(string sqlServerConnectionString)
: base(GetEfConnectionString(sqlServerConnectionString))
{
}
private string GetEfConnectionString(string sqlServerConnectionString)
{
// values added by T4 generation
string format = "metadata=res://*/Data.DataContext.EntityFramework.MesSystem.csdl|res://*/Data.DataContext.EntityFramework.MesSystem.ssdl|res://*/Data.DataContext.EntityFramework.MesSystem.msl;;provider=System.Data.SqlClient;provider connection string=\"{0}\"";
return String.Format(format, sqlServerConnectionString);
}
...
}
我的问题是如何在不为每个 EDMX 文件硬编码的情况下,在 T4 生成文件中获取创建实体框架连接所需的元数据
或者
有没有更简单的方法以编程方式从程序集中加载元数据?