2009-10-01 6 views
6

Próbuję użyć procedura składowana w strukturze podmiotu, który nic nie zwraca. Procedura składowana służy wyłącznie do rejestrowania.Procedury przechowywane w strukturze jednostki

Dodałem funkcję (prawy przycisk myszy -> Dodaj -> import funkcji), która działa TYLKO, gdy zwrócona wartość jest ustawiona na jedną z encji. Kiedy zmienię typ zwracany na Int32, Bool lub nic lub dowolną inną wartość niż encja, funkcja (metoda) po prostu znika, gdy tylko kliknę przycisk kompilacji.

Jakieś sugestie, jak mogę to posortować?

Odpowiedz

7

Na razie nie możesz - musisz użyć jednej z jednostek zdefiniowanych w twoim modelu (chociaż myślałem, że podstawowe typy skalarne, takie jak INT, również powinny działać).

Wszystko powinno się dużo lepiej z EF4 - ukaże się pod koniec 2009 roku lub na początku 2010.

Zobacz te artykuły do ​​niektórych informacji na temat tych nowych funkcji:

Jeśli przechowywany proc jest przeznaczony wyłącznie do logowania, prawdopodobnie wyprowadziłbym go poza kontekst Entity Framework i sus t wywołać procedurę przechowywaną w dobrym starodawnym stylu ADO.NET ... dlaczego nawet zawracać sobie głowę umieszczaniem tego wszystkiego w kontekście EF? Nie odzyskujesz, nie manipulujesz i nie przechowujesz danych za pomocą tej usługi rejestrowania - po prostu ustaw ją jako statyczną dla klasy statycznej - zachowaj ją w prosty sposób!

Marc

5

Jest to jeden ze sposobów wykonywania procedury przechowywanej z ram enitity:

  using (SEntities se = new SEntities()) 
      { 
       EntityConnection entityConnection = (EntityConnection)se.Connection; 
       DbConnection storeConnection = entityConnection.StoreConnection; 

       storeConnection.Open(); 

       DbCommand command = storeConnection.CreateCommand(); 
       command.CommandText = "NameOfStoredProcedure"; 
       command.CommandType = CommandType.StoredProcedure; 
       command.Parameters.Add(new SqlParameter("param1", value_of_param1)); 
       command.Parameters.Add(new SqlParameter("param2", value_of_param2)); 

       SqlParameter param3 = new SqlParameter(); 
       pA.SqlDbType = SqlDbType.Bit; 
       pA.ParameterName = "@param3"; 
       pA.Direction = ParameterDirection.Output; 
       command.Parameters.Add(param3); 

       command.ExecuteNonQuery(); 

       returnValue = Convert.ToBoolean(param3.Value); 
      } 
1

Z EF 4.1, jest to możliwe. Do Ef 4.0, nie jest to możliwe. Można używać następujące linie do wywoływania sp w ef 4,1

res = ctx.Database.SqlQuery<MyResultType1>(...your SP call...); 

Dalsze wyjaśnienia można znaleźć Handle Stored Procedure in Entity Framework