- 預存程序對應並透過 SQL Profile 觀察
- 預存程序和函式匯入實體模型
Store Procedure - InsertPerson TSQL 語法
CREATE PROCEDURE [dbo].[InsertPerson]
@LastName nvarchar(50),
@FirstName nvarchar(50),
@HireDate datetime,
@EnrollmentDate datetime,
@Discriminator nvarchar(50)
AS
INSERT INTO dbo.Person (
LastName,
FirstName,
HireDate,
EnrollmentDate,
Discriminator)
VALUES (
@LastName,
@FirstName,
@HireDate,
@EnrollmentDate,
@Discriminator);
SELECT SCOPE_IDENTITY() AS NewPersonID;
GO
Person Entity 的預存程序對應設定C# Code 執行測試
namespace EFStoreProcedure2
{
class Program
{
static void Main(string[] args)
{
using (var context = new SchoolEntities())
{
var newInstructor = new Person
{
FirstName = "Robyn",
LastName = "Martin",
HireDate = DateTime.Now,
Discriminator = "Instructor"
};
// Add the new object to the context.
context.Person.Add(newInstructor);
Console.WriteLine("Added {0} {1} to the context.",
newInstructor.FirstName, newInstructor.LastName);
Console.WriteLine("Before SaveChanges, the PersonID is: {0}",
newInstructor.PersonID);
// SaveChanges will call the InsertPerson sproc.
// The PersonID property will be assigned the value
// returned by the sproc.
context.SaveChanges();
Console.WriteLine("After SaveChanges, the PersonID is: {0}",
newInstructor.PersonID);
}
}
}
}
執行結果MSDN 文章說明,使用 Store Procedure 注意事項
預存程序的對應 CUD 作業時的考量,當將 CUD 作業對應至預存程序中,適用下列考量:針對第三點測試,假如預存程序對應時,沒有設定 NewPersonID 的話,不會出現任何錯誤訊息,就 identity 欄位不會帶回來而已,執行後如下圖
- 如果您要對應 CUD 作業的其中一個預存程序,將對應所有人都。 如果您不會對應所有三個,對應的作業將會失敗,如果執行,而且UpdateException就會擲回。
- 您必須將預存程序的每個參數對應至實體屬性。
- 如果伺服器就會產生主索引鍵值插入的資料列,您必須將此值對應回實體的索引鍵屬性。 在範例中,如下所示InsertPerson預存程序會傳回新建立的主索引鍵做為預存程序的結果集的一部分。 主索引鍵對應到實體索引鍵 (PersonID) 使用**<加入結果繫結>** EF 設計工具的功能。
- 預存程序呼叫是對應與 1:1 概念模型中的實體。 例如,如果您實作在概念模型,然後對應中的繼承階層架構 CUD 預存程序父代(基本) 和子(衍生) 的實體,儲存子系變更都只會呼叫子的預存程序,就不會觸發父的預存程序呼叫。
沒有留言:
張貼留言