Obejrzałem kilka prezentacji EF Code First i nie widziałem, jak EFCF działa z procedurami składowanymi.
Jak mogę zadeklarować metodę, która będzie korzystała z niektórych sp? Czy mogę przekazać jednostkę do metody, która wywołuje sp bez ręcznego mapowania właściwości jednostki na parametry sp?
Co się stanie, jeśli zmienię model? Czy spowoduje to spadek mojego sp podczas odtwarzania tabeli z modelu? A co z wyzwalaczami?
Jeśli te rzeczy nie są obsługiwane, czy są jakieś plany, aby wspierać je w przyszłości?
Odpowiedzi:
EDYCJA: Moja pierwotna odpowiedź dotycząca EF4.1 (poniżej) jest teraz nieaktualna. Zobacz odpowiedź poniżej od Diego Vegi (który pracuje w zespole EF w firmie Microsoft)!
@gsharp i Shawn Mclean: Skąd bierzesz te informacje? Czy nadal nie masz dostępu do bazowego ObjectContext?
Zastąp instrukcję „select” zapisanym procesem i gotowe.
A jeśli chodzi o twoje drugie pytanie: tak, niestety twoje sp's zostaną zablokowane. Może być konieczne dodanie instrukcji „CREATE PROCEDURE” do kodu.
Dla EF 4.2:
źródło
Aktualizacja: od EF6 EF Code First obsługuje mapowanie procedur składowanych dla wstawiania, aktualizacji i usuwania. Mapowanie procedury składowanej można określić podczas tworzenia modelu przy użyciu metody MapToStoredProcedures. Obsługujemy również automatyczne tworzenie szkieletów podstawowych procedur składowanych dla tych operacji. Zobacz specyfikację funkcji tutaj .
Oryginalna odpowiedź: nie będziemy obsługiwać mapowania procedur składowanych w modelu w Code-First w pierwszej wersji ani nie będziemy mieć możliwości automatycznego generowania procedur składowanych dla operacji CRUD z Twoich typów. Są to funkcje, które chcielibyśmy dodać w przyszłości.
Jak wspomniano w tym wątku, można wrócić do ObjectContext, ale DbContext zapewnia również ładne interfejsy API do wykonywania natywnych zapytań i poleceń SQL (np. DbSet.SqlQuery, DbContext.Database.SqlQuery i DbContext.Database.ExecuteSqlCommand). Różne wersje SqlQuery mają te same podstawowe funkcje materializacji, które istnieją w EF4 (np. ExecuteStoreQuery: http://msdn.microsoft.com/en-us/library/dd487208.aspx ).
Mam nadzieję że to pomoże.
źródło
źródło
Bardziej bezpieczne rozwiązanie byłoby następujące:
http://strugglesofacoder.blogspot.be/2012/03/calling-stored-procedure-with-entity.html
Zastosowanie tej klasy to:
źródło
W przypadku platformy .NET Core (EntityFrameworkCore) udało mi się je uruchomić.
Może nie jest to najładniejsze, ale to zdecydowanie działa.
Migracja w celu dodania procedury składowanej wygląda następująco :
Mógłbym wtedy zadzwonić za pomocą następującego kodu:
Później próbowano pobrać niektóre powiązane dane (dane dotyczące relacji jeden do wielu, np. Treść posta) i blog wrócił z wypełnioną treścią posta zgodnie z oczekiwaniami.
źródło