Est-il possible d'exécuter SQL natif avec une structure d'entité?

ado.net entity-framework sql

Question

J'essaie de rechercher un champ XML dans une table. Cela n'est pas pris en charge avec EF.

Sans utiliser pur Ado.net est-il possible d'avoir un support SQL natif avec EF?

Réponse acceptée

Pour .NET Framework version 4 et ObjectContext.ExecuteStoreCommand() : utilisez ObjectContext.ExecuteStoreCommand() si votre requête ne renvoie aucun résultat, et ObjectContext.ExecuteStoreQuery si votre requête renvoie des résultats.

Pour les versions précédentes du .NET Framework, voici un exemple illustrant ce qu'il faut faire. Remplacez ExecuteNonQuery () au besoin si votre requête renvoie des résultats.

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

Réponse populaire

En utilisant Entity Framework 5.0 vous pouvez utiliser ExecuteSqlCommand pour exécuter SQL instructions SQL pur multilignes / multi-commandes. De cette façon, vous n'aurez besoin d'aucun objet de sauvegarde pour stocker la valeur renvoyée car la méthode renvoie un int (résultat renvoyé par la base de données après l'exécution de la commande).

Échantillon:

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

Pour en savoir plus, consultez ici: Code Entity Framework First: exécution de fichiers SQL lors de la création d'une base de données



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow