Ist es möglich, native SQL mit Entity Framework auszuführen?

ado.net entity-framework sql

Frage

Ich versuche ein XML-Feld in einer Tabelle zu durchsuchen. Dies wird von EF nicht unterstützt.

Ohne reines Ado.net ist es möglich, native EF-Unterstützung mit EF zu haben?

Akzeptierte Antwort

Für .NET Framework Version 4 und höher: Verwenden Sie ObjectContext.ExecuteStoreCommand() wenn Ihre Abfrage keine Ergebnisse zurückgibt, und verwenden Sie ObjectContext.ExecuteStoreQuery wenn Ihre Abfrage Ergebnisse zurückgibt.

Für frühere .NET Framework-Versionen wird hier ein Beispiel veranschaulicht, was zu tun ist. Ersetzen Sie ExecuteNonQuery () nach Bedarf, wenn Ihre Abfrage Ergebnisse zurückgibt.

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
    }
}

Beliebte Antwort

Mit Entity Framework 5.0 Sie ExecuteSqlCommand , um reine SQL Anweisungen mit mehreren Zeilen und mehreren ExecuteSqlCommand auszuführen. Auf diese Weise müssen Sie kein Sicherungsobjekt bereitstellen, um den zurückgegebenen Wert zu speichern, da die Methode ein int (das Ergebnis, das die Datenbank nach der Ausführung des Befehls zurückgibt) zurückgibt.

Probe:

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);
");

Weitere Informationen hierzu finden Sie hier: Entity Framework Code First: Ausführen von SQL-Dateien bei der Datenbankerstellung



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum