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);
}
}
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
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
Jest to teraz możliwe z EF6.1 i utworzoną konwencją niestandardową. Spójrz na moją odpowiedź poniżej. – Pawel