11

Czy ktoś wie, czy możliwe jest użycie TVF w strukturze encji za pomocą kodu? Aby być konkretnym:TVF (funkcja wartości tabeli) w strukturze encji za pomocą kodu najpierw

Wiem, że nie jest to obecnie obsługiwane przez kod (i wygląda na to, że EF6 na to zezwala). Z drugiej strony, późniejsze wersje EF obsługują TVF w scenariuszu bazodanowym (co nie jest dla mnie opcją). Zastanawiam się, czy ktoś wie, czy istnieje jakiś sposób naśladowania, co najpierw baza danych robi, manipulując modelem lub coś podobnego?

Jeszcze jedno wyjaśnienie; Wiem, że możliwe jest dołączanie TVF za pomocą SQL, ale potrzebuję również, aby TVF były możliwe do złożenia (to jest część oświadczenia LINQ podmiotu).

+0

W EF6 bardzo hackowskim rozwiązaniem jest użycie przechwytywacza do przepisania nazwy tabeli podmiotu na wywołanie TVF. Zrobiłem przykładową implementację tutaj (https://gist.github.com/sinelaw/9084984). ** Niezalecane! ** – sinelaw

+0

możliwy duplikat [Jak korzystać z funkcji wycenionych w tabeli w ramach kodu ramowego encji pierwsze podejście?] (Http://stackoverflow.com/questions/16769299/how-to-use-table-valued-function -in-entity-framework-code-first-approach) – magnattic

+0

Jest to teraz możliwe z EF6.1 i utworzoną konwencją niestandardową. Spójrz na moją odpowiedź poniżej. – Pawel

Odpowiedz

8

To jest teraz możliwe. Stworzyłem niestandardową konwencję modelu, która pozwala używać funkcji sklepu w CodeFirst w EF6.1. Konwencja jest dostępna na NuGet http://www.nuget.org/packages/EntityFramework.CodeFirstStoreFunctions. Tutaj znajduje się link do blogu zawierającego wszystkie szczegóły: http://blog.3d-logic.com/2014/04/09/support-for-store-functions-tvfs-and-stored-procs-in-entity-framework-6-1/

+0

Niesamowita praca Pawel! Przeczytałem twój blog wcześniej dzisiaj. Nie mogę się doczekać wypróbowania go następnym razem, gdy spróbujemy wyrzucić pliki edmx. –

+0

Dzięki! Mam nadzieję, że to zadziała dla Ciebie! – Pawel

-3

Można użyć Table-Valued Function w Entity Framework 5.I zdaniem link rozwiąże pytanie:

Do korzystania Wartość Tabela funkcji w Entity Framework trzeba wykonać następujące czynności:

1. Kliknij prawym przyciskiem myszy nazwę projektu w Eksploratorze rozwiązań, wskaż polecenie Dodaj, a następnie kliknij opcję Nowy
Przedmiot.

2. Wybierz opcję Dane z menu po lewej stronie, a następnie wybierz Model danych jednostki podmiotu ADO w panelu szablonów .

Wprowadź nazwę pliku TVFModel.edmx, a następnie kliknij przycisk Dodaj.

4. W oknie dialogowym Zawartość Wybierz model wybierz Generuj z bazy danych, a następnie kliknij przycisk Dalej .

5. Kliknij Nowe połączenie Wprowadź (localdb)\v11.0 w polu tekstowym Nazwa serwera Wprowadź szkole dla nazwa bazy danych kliknij OK.

6. W Wybierz obiekty bazy danych okno dialogowe, w węźle Tables wybierz
osoby, StudentGrade i przedmiotu tabele.

7. Wybierz funkcję GetStudentGradesForCourse znajdujący się pod procedur przechowywanych i węzła Funkcje nocie, że wychodząc z Visual Studio 2012, Podmiot Designer
pozwala na partię importować przechowywanych procedur i funkcji.

8. Kliknij przycisk Zakończ.

9. Podmiot Designer, który zapewnia powierzchnię projektu do edycji modelu, jest
wyświetlany. Wszystkie obiekty wybrane w oknie dialogowym Choose Your Database Objects
zostaną dodane do modelu.

10. Domyślnie kształt wyniku każdej zaimportowanej procedury przechowywanej lub funkcji automatycznie stanie się nowym złożonym typem w modelu encji. Ale chcemy mapować wyniki funkcji GetStudentGradesForCourse do jednostki StudentGrade: kliknij prawym przyciskiem myszy na powierzchnię projektu i wybierz model Browser W modelu przeglądarki wybierz Import funkcję, a następnie kliknij dwukrotnie
GetStudentGradesForCourse funkcję W okno dialogowe Importuj Edycja funkcji, wybierz Podmioty i wybierz StudentGrade

można użyć następującego kodu do korzystania Table-Value Function w aplikacji do pobierania danych:

using (var context = new SchoolEntities()) 
{ 
    var CourseID = 4022; 
    var Grade = 3.5M; 

    // Return all the best students in the Microeconomics class. 
    var students = from s in context.GetStudentGradesForCourse(CourseID) 
          where s.Grade >= Grade 
          select new 
          { 
           s.Person, 
           s.Course.Title 
          }; 

    foreach (var result in students) 
    { 
     Console.WriteLine(
      "Couse: {0}, Student: {1} {2}", 
      result.Title, 
      result.Person.FirstName, 
      result.Person.LastName); 
    } 
} 
+0

Vaibhav, pyta o "pierwsze wsparcie kodu". Plik .edmx to "najpierw baza danych". –

1

Obecnie jest to , a nie. Zostało przełożone na EF6. Najlepiej jest głosować na to na swojej płycie User Voice. Sugestia dotycząca funkcji nosi tytuł "Code First support for Table-Valued Functions". Właśnie na to 3 głosy.

+0

Jest to teraz możliwe - zobacz moją odpowiedź. – Pawel