7

MSDNでは、このメソッドは「SQLリソースファイルを実行する操作を追加します」と表示します。そのシグネチャは次のとおりです。EFの移行でSqlResourceメソッドを使用するにはどうすればよいですか?

protected internal void SqlResource(
    string sqlResource, 
    Assembly resourceAssembly = null, 
    bool suppressTransaction = false, 
    object anonymousArguments = null 
) 

そしてsqlResourceパラメータはThe manifest resource name of the SQL resource file to be executed.として記述されているが、通常の.resxリソースファイルと同じ「SQLリソースファイル」であり、もしそうなら、それは多くのファイルを含めることができますので、どのように私は指定しませんリソースファイルの名前、およびそのリソース内のファイルをこの1つのパラメータで指定しますか?または、 "SQLリソースファイル"は、1つのSQLスクリプトのみを含む異なるタイプのファイルです。このファイルの名前をsqlResourceパラメータに渡すだけですか?

答えて

7

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から名前sqlResourcemanifest 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ではありません。

+0

ああ、それは多くの光を放つ。私は、数年前、そのファイルを読むことは埋め込まれたリソースにすることができたの唯一の暗い記憶を持っています。私はいつもリソースが話されたときに、それが.resxファイル内にあると仮定していたとは別に、 – ProfK

+0

どのような素晴らしい答え。ありがとう@Evk – erkinyldz

関連する問題