2009-11-05 22 views
5

Czy istnieje sposób na uruchomienie instrukcji sql bezpośrednio z wywołań generowanych przez strukturę encji? Czy będę musiał utworzyć procedurę, a następnie wywołać ją za pośrednictwem struktury podmiotu?Uruchamianie sql w strukturze encji?

Odpowiedz

10

Czy Googling wokół tego sobie na drugi dzień, to jest przykład znalazłem nadzieję, że pomoże

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(); 
      using (DbCommand cmd = conn.CreateCommand()) 
      { 
       cmd.CommandText = sql; 
       cmd.ExecuteNonQuery(); 
      } 
     } 
     finally 
     { 
      if (initialState != ConnectionState.Open) 
       conn.Close(); 
     } 
    } 
+1

radziłbym zastosowanie ExecuteStoreCommand() w ObjectContext zamiast powyższego ExecuteSql() –

5

W EF 4.0 to dość łatwe, ponieważ istnieją nowe sposoby na ObjectContext które pozwalają na wykonywanie poleceń możliwy (czyli SQL) bezpośrednio:

Zobacz to: ExecuteStoreCommand

Jeśli nadal używa EF 3.5 SP1 nadal można wykonać kwerendy bezpośrednio przeciwko bazy danych, jeśli naprawdę chcesz to lubi:

var econn = ctx.Connection as EntityConnection; 
var dbconn = econn.StoreConnection; 

w tym momencie masz dostęp do połączenia (dbconn) do podstawowej bazy danych, dzięki czemu można używać normalny kod ADO.NET do wykonywania zapytań itp

nadzieję, że to pomaga

Alex

0

@Alex James, z ciekawości, to byłoby skuteczne, aby uruchomić pełne kawałek kodu SQL tekst, podobnie jak w nie powinno być żadnego obciążenia wydajnościowego, prawda? Mówiąc, uruchamiając ten sam pełny tekst kodu SQL prosto jako zapytanie w sql management studio.

1

ExecuteStoreQuery<> i ExecuteStoreCommand jest to, co chcesz:

using (NorthWindEntities ctx = new NorthWindEntities()) 
{ 
    ctx.ExecuteStoreQuery<>() 
    ctx.ExecuteStoreCommand(); 
} 
Powiązane problemy