Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym przewodniku krok po kroku pokazano, jak zaimportować procedury składowane do modelu przy użyciu projektanta programu Entity Framework (EF Designer), a następnie wywołać zaimportowane procedury składowane w celu pobrania wyników.
Należy pamiętać, że funkcja Code First nie obsługuje mapowania na procedury składowane ani funkcje. Można jednak wywołać procedury składowane lub funkcje przy użyciu metody System.Data.Entity.DbSet.SqlQuery. Na przykład:
var query = context.Products.SqlQuery("EXECUTE [dbo].[GetAllProducts]")`;
Wymagania wstępne
W celu przejścia przez ten przewodnik będą potrzebne:
- Najnowsza wersja programu Visual Studio.
- Przykładowa baza danych School.
Konfigurowanie projektu
- Otwórz program Visual Studio 2012.
- Wybierz Plik — Nowy —>> Projekt
- W okienku po lewej stronie kliknij pozycję Visual C#, a następnie wybierz szablon Konsola.
- Wpisz EFwithSProcsSample jako nazwę.
- Wybierz przycisk OK.
Tworzenie modelu
Kliknij prawym przyciskiem myszy projekt w Eksploratorze rozwiązań i wybierz polecenie Dodaj —> nowy element.
Wybierz pozycję Dane z menu po lewej stronie, a następnie wybierz Model Danych Jednostki ADO.NET w panelu Szablonów.
Wprowadź wartość EFwithSProcsModel.edmx jako nazwę pliku, a następnie kliknij przycisk Dodaj.
W oknie dialogowym Wybieranie zawartości modelu wybierz pozycję Generuj z bazy danych, a następnie kliknij przycisk Dalej.
Kliknij pozycję Nowe połączenie.
W oknie dialogowym Właściwości połączenia wprowadź nazwę serwera (na przykład (localdb)\mssqllocaldb), wybierz metodę uwierzytelniania, wpisz School jako nazwę bazy danych, a następnie kliknij przycisk OK.
Okno dialogowe Wybór połączenia danych jest zaktualizowane z ustawieniem połączenia z bazą danych.W oknie dialogowym Wybieranie obiektów bazy danych zaznacz pole wyboru Tabele , aby zaznaczyć wszystkie tabele.
Ponadto wybierz następujące procedury składowane w węźle Procedury składowane i funkcje : GetStudentGrades i GetDepartmentName.
Począwszy od programu Visual Studio 2012 projektant EF Designer obsługuje zbiorcze importowanie procedur składowanych. Importowanie wybranych procedur składowanych i funkcji do modelu encji jest domyślnie zaznaczone.
Kliknij przycisk Zakończ.
Domyślnie kształt wyniku każdej zaimportowanej procedury składowanej lub funkcji, która zwraca więcej niż jedną kolumnę, automatycznie stanie się nowym typem złożonym. W tym przykładzie chcemy zamapować wyniki funkcji GetStudentGrades na jednostkę StudentGrade i wyniki GetDepartmentName na none (none jest wartością domyślną).
Aby import funkcji zwrócił typ jednostki, kolumny zwrócone przez odpowiednią procedurę składowaną muszą dokładnie odpowiadać właściwościom skalarnym zwracanego typu jednostki. Import funkcji może również zwracać kolekcje prostych typów, typów złożonych lub bez wartości.
- Kliknij prawym przyciskiem myszy powierzchnię projektową i wybierz pozycję Przeglądarka modeli.
- W Model Browser wybierz Importy funkcji, a następnie dwukrotnie kliknij funkcję GetStudentGrades.
- W oknie dialogowym Edytowanie importu funkcji wybierz pozycję Jednostki i wybierz pozycję StudentGrade.
Pole Importy funkcji dają się komponować na górze okna dialogowego Importy funkcji umożliwia mapowanie do funkcji kompozycyjnych. Jeśli to pole wyboru zostanie zaznaczone, na liście rozwijanej Procedura składowana/Nazwa funkcji będą wyświetlane tylko funkcje komponowalne (Funkcje z wartością tabeli). Jeśli to pole nie zostanie zaznaczone, na liście będą wyświetlane tylko funkcje niekomponowalne.
Korzystanie z modelu
Otwórz plik Program.cs, w którym zdefiniowano metodę Main. Dodaj następujący kod do funkcji Main.
Kod wywołuje dwie procedury składowane: GetStudentGrades (zwraca StudentGrades dla określonego StudentId) i GetDepartmentName (zwraca nazwę działu do parametru wyjściowego).
using (SchoolEntities context = new SchoolEntities())
{
// Specify the Student ID.
int studentId = 2;
// Call GetStudentGrades and iterate through the returned collection.
foreach (StudentGrade grade in context.GetStudentGrades(studentId))
{
Console.WriteLine("StudentID: {0}\tSubject={1}", studentId, grade.Subject);
Console.WriteLine("Student grade: " + grade.Grade);
}
// Call GetDepartmentName.
// Declare the name variable that will contain the value returned by the output parameter.
ObjectParameter name = new ObjectParameter("Name", typeof(String));
context.GetDepartmentName(1, name);
Console.WriteLine("The department name is {0}", name.Value);
}
Skompiluj i uruchom aplikację. Program generuje następujące dane wyjściowe:
StudentID: 2
Student grade: 4.00
StudentID: 2
Student grade: 3.50
The department name is Engineering
Parametry wyjściowe
Jeśli są używane parametry wyjściowe, ich wartości nie będą dostępne do czasu całkowitego odczytania wyników. Jest to spowodowane podstawowym zachowaniem klasy DbDataReader, zobacz Pobieranie danych przy użyciu klasy DataReader, aby uzyskać więcej szczegółów.