HOW TO:定義具有預存程序的模型 (Entity Framework)
您可以用兩種方式,在概念模型中公開定義於資料庫中的預存程序:
您可以在概念模型中建立對應至預存程序的函式匯入。 這樣做可讓您針對 ObjectContext 定義方法,以便執行資料庫中的預存程序。 根據預存程序的定義方式,對應的函式匯入可傳回實體類型或複雜類型。
您可以將實體類型的插入、更新和刪除作業對應至預存程序。 這樣做可讓您針對實體類型定義自訂插入、更新和刪除行為。
注意: 如果您沒有將實體類型的插入、更新和刪除作業都對應到預存程序,在執行階段中執行這些未對應的作業將會失敗,並且會擲回 UpdateException。
本主題將描述如何在概念模型中建立對應至資料庫預存程序的函式匯入。 如需將實體類型之插入、更新和刪除作業對應至預存程序的詳細資訊,請參閱 HOW TO:使用修改預存程序定義模型 (Entity Framework)。
建議您使用 ADO.NET Entity Data Model Tools來建立對應至預存程序的函式匯入。 如需使用實體資料模型工具的詳細資訊,請參閱下列主題:
您也可以手動編輯模型和對應檔,以便建立對應至預存程序的函式匯入。 本主題中的範例將示範如何進行此作業,而且這個範例是以 School 範例資料庫和 School 模型為基礎。 如需根據 School 資料庫產生 School 模型的詳細資訊,請參閱 EDM 產生器 (EdmGen.exe)。 假設您已經在資料庫中定義了預存程序,建立對應至預存程序之函式匯入的基本步驟如下所示:
將 Function 項目加入至儲存體模型,以便在資料庫中指定預存程序。
將 FunctionImport 項目加入至概念模型,以便在概念模型中指定函式匯入。
將 FunctionImportMapping 項目加入至對應檔,以便將概念模型中的函式匯入對應至儲存體模型中的函式。
本主題中的程序將描述如何建立 Function、FunctionImport 和 FunctionImportMapping 項目,以便將下列預存程序匯入概念模型中:
IF NOT EXISTS (SELECT * FROM sys.objects
WHERE object_id = OBJECT_ID(N'[dbo].[GetStudentGrades]')
AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'
CREATE PROCEDURE [dbo].[GetStudentGrades]
@StudentID int
AS
SELECT EnrollmentID, Grade, CourseID, StudentID FROM dbo.StudentGrade
WHERE StudentID = @StudentID
'
END
GO
若要將 Function 項目加入至儲存體模型
開啟儲存體模型 (.ssdl 檔案)。
加入下列 Function 項目,做為 Schema 項目的子系:
<Function Name="GetStudentGrades" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo"> <Parameter Name="StudentID" Type="int" Mode="In" /> </Function>
若要將 FunctionImport 項目加入至概念模型
開啟概念模型 (.csdl 檔案)。
加入下列 FunctionImport 項目,做為 EntityContainer 項目的子系:
<FunctionImport Name="GetStudentGrades" EntitySet="StudentGrades" ReturnType="Collection(SchoolModel.StudentGrade)"> <Parameter Name="StudentID" Mode="In" Type="Int32" /> </FunctionImport>
若要將 FunctionImportMapping 項目加入至對應檔
開啟對應檔 (.msl 檔案)。
加入下列 FunctionImportMapping 項目,做為 EntityContainerMapping 項目的子系:
<FunctionImportMapping FunctionImportName="GetStudentGrades" FunctionName="SchoolModel.Store.GetStudentGrades" />
另請參閱
其他資源
定義進階資料模型 (Entity Framework 工作)
How to: Define Custom Functions in the Storage Model
CSDL、SSDL 和 MSL 規格