是否可以使用實體框架運行本機sql?

ado.net entity-framework sql

我正在嘗試搜索表中的XML字段,EF不支持此功能。

如果不使用純Ado.net,可以在EF中使用本機SQL支持嗎?

一般承認的答案

對於.NET Framework版本4及更高版本:如果查詢未返回任何結果,請使用ObjectContext.ExecuteStoreCommand()如果查詢返回結果,請使用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);
");

有關這方面的更多信息,請查看此處: 實體框架代碼優先:在數據庫創建時執行SQL文件



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因