モデルファーストアプローチでEF5を使用してEDMXを作成しました。つまり、空白のデザイナーから始めて、エンティティをモデル化しました。ここで、EDMXで定義されたこのモデルを使用できるようにしたいのですが、構成ファイルを変更せずにランタイムSQLServer接続文字列を提供します。
接続文字列を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
プログラムでSQLServer接続文字列を渡して、メタデータ部分を「追加」できるようにしたい。
これは私が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);
}
...
}
私の質問は、T4生成ファイルで必要なメタデータを取得して、EDMXファイルごとにハードコーディングせずにEntityFramework接続を作成するにはどうすればよいかということです。
また
プログラムでアセンブリからメタデータをロードする簡単な方法はありますか?