エンティティフレームワークでネイティブSQLを実行することは可能ですか?

ado.net entity-framework sql

質問

テーブル内のXMLフィールドを検索しようとしています。これはEFではサポートされていません。

純粋なAdo.netを使わずにEFでネイティブSQLをサポートすることは可能ですか?

受け入れられた回答

.NET Frameworkバージョン4以上の場合:クエリが結果を返さない場合はObjectContext.ExecuteStoreCommand()を使用し、クエリが結果を返す場合はObjectContext.ExecuteStoreQueryを使用しObjectContext.ExecuteStoreQuery

以前のバージョンの.NET Frameworkの場合は、ここで何をすればよいかを示すサンプルがあります。クエリが結果を返す場合は、必要に応じてExecuteNonQuery()を置き換えます。

static void ExecuteSql(ObjectContext c, string sql)
{
    var entityConnection = (System.Data.EntityClient.EntityConnection)c.Connection;
    DbConnection conn = entityConnection.StoreConnection;
    ConnectionState initialState = conn.State;
    try
    {
        if (initialState != ConnectionState.Open)
            conn.Open();  // open connection if not already open
        using (DbCommand cmd = conn.CreateCommand())
        {
            cmd.CommandText = sql;
            cmd.ExecuteNonQuery();
        }
    }
    finally
    {
        if (initialState != ConnectionState.Open)
            conn.Close(); // only close connection if not initially open
    }
}

人気のある回答

Entity Framework 5.0を使用すると、 ExecuteSqlCommandを使用して複数行/複数コマンドの純粋なSQLステートメントを実行できます。この方法では、メソッドがint(コマンドの実行後にデータベースから返される結果)を返すので、戻り値を格納するためのバッキングオブジェクトを提供する必要はありません。

サンプル:

context.Database.ExecuteSqlCommand(@
"-- Script Date: 10/1/2012 3:34 PM  - Generated by ExportSqlCe version 3.5.2.18
SET IDENTITY_INSERT [Students] ON;

INSERT INTO [Students] ([StudentId],[FirstName],[LastName],[BirthDate],[Address],[Neighborhood],[City],[State],[Phone],[MobilePhone],[Email],[Enrollment],[Gender],[Status]) VALUES (12,N'First Name',N'SecondName',{ts '1988-03-02 00:00:00.000'},N'RUA 19 A, 60',N'MORADA DO VALE',N'BARRA DO PIRAÍ',N'Rio de Janeiro',N'3346-7125',NULL,NULL,{ts '2011-06-04 21:25:26.000'},2,1);

INSERT INTO [Students] ([StudentId],[FirstName],[LastName],[BirthDate],[Address],[Neighborhood],[City],[State],[Phone],[MobilePhone],[Email],[Enrollment],[Gender],[Status]) VALUES (13,N'FirstName',N'LastName',{ts '1976-04-12 00:00:00.000'},N'RUA 201, 2231',N'RECANTO FELIZ',N'BARRA DO PIRAÍ',N'Rio de Janeiro',N'3341-6892',NULL,NULL,{ts '2011-06-04 21:38:38.000'},2,1);
");

これについて詳しくは、こちらをご覧ください。Entity Frameworkのコード最初:データベース作成時のSQLファイルの実行



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ