EFは、オープンソースのフレームワークであるので、これを見つけるための最も簡単な方法は、ソースコードを見ている:
protected internal void SqlResource(string sqlResource, Assembly resourceAssembly = null, bool suppressTransaction = false, object anonymousArguments = null)
{
Check.NotEmpty(sqlResource, "sqlResource");
resourceAssembly = resourceAssembly ?? Assembly.GetCallingAssembly();
if (!resourceAssembly.GetManifestResourceNames().Contains(sqlResource))
{
throw new ArgumentException(Strings.UnableToLoadEmbeddedResource(resourceAssembly.FullName, sqlResource));
}
using (var textStream = new StreamReader(resourceAssembly.GetManifestResourceStream(sqlResource)))
{
AddOperation(
new SqlOperation(textStream.ReadToEnd(), anonymousArguments)
{
SuppressTransaction = suppressTransaction
});
}
}
あなたは、このメソッドは最初に(アセンブリresourceAssembly
から名前sqlResource
でmanifest resourceを読み込むことがわかりますnullの場合は呼び出しアセンブリを使用します)。このリソースからのテキストはsqlとして扱われ、通常のSqlOperation
が追加されます。
mantifestリソースとして任意のファイルをアセンブリに埋め込む方法はたくさんあります。このような特別な状況のための簡単な方法は、このファイルをビルドアクション "組み込みリソース"でプロジェクトに追加することです。だから "CreateTables.sql"のような名前のSQLファイルがあります。 Visual Studioプロジェクトを右クリックし、 "Add> Existing Item"をクリックし、 "CreateTables.sql"ファイルを選択し、Visual Studioプロジェクトで右クリックし、Build Actionを "Embedded Resource"として選択します。これにより、名前がDefaultNamespaceOfYourAssembly.Folder.SubFolder.CreateTables.sql
のマニフェストリソースが生成されます(フォルダなしでルートに置いた場合、明らかにFolder.SubFolderの部分をスキップします)。上記の方法でsqlResource
として使用できます。
あなたが言いましたresxファイルに関しては、そのファイル自体はマニフェストリソースですが、ここでは使用できません。その一部だけを使用することはできません。それは全体として、しかしそれはXMLファイルであり、SQLではありません。
出典
2016-11-28 08:41:58
Evk
ああ、それは多くの光を放つ。私は、数年前、そのファイルを読むことは埋め込まれたリソースにすることができたの唯一の暗い記憶を持っています。私はいつもリソースが話されたときに、それが.resxファイル内にあると仮定していたとは別に、 – ProfK
どのような素晴らしい答え。ありがとう@Evk – erkinyldz