2011-03-17 38 views
10

我對什麼是StoreGeneratedPattern的最高性能方式感興趣。實體框架中推薦的身份生成方法是什麼?

在過去,我是用來讓數據庫生成的ID爲我,但我不知道是否有在設定的

StoreGeneratedPattern = Identity 

StoreGeneratedPattern = None 

,而不是任何優勢,我甚至不能確定當我將其設置爲「計算」時發生了什麼。

有什麼建議嗎?有沒有什麼好的文章與此相關,因爲msdn不是很具說明性。我在我的模式中主要使用幾個GUID。

回答

20

查看我的blog postStoreGeneratedPattern。它解釋了IdentityComputed之間的一些區別。當使用StoreGeneratedPattern作爲ID(PK)時,如果您在應用程序中分配了ID,則正確的選項是None;如果您在數據庫中分配了ID,則使用IdentityComputed選項是「無效的」,因爲在每個實體持久性期間(也在更新中)更改值時使用此選項,並且不是ID的情況。

IdentityComputed之間的差異是執行的SQL命令的行爲。如果屬性爲Identity,EF將在插入後選擇該值並將其返回給您的應用程序。如果屬性爲Computed EF將在插入和更新後選擇值並將其返回給您的應用程序。

編輯:

StoreGeneratedPattern.Identity在DB是不相關的身份。您不需要在數據庫中擁有Identity,並且可以使用某種不同的techinque(guid或trigger的默認值)設置ID,但仍需要StoreGeneratedPattern.Identity才能將價值返回給您的應用程序。

一旦您使用IdentityComputed EF將始終關注每個插入或更新並帶有選擇以生成db生成的列。沒有它,它就無法工作。這些命令在數據庫中單向往返執行,因此幾乎沒有性能影響。

+0

謝謝,這主要回答我的問題。還有一個困境。我可以在數據庫中設置ID列不是身份,但仍然是主鍵。 在這種情況下,EF將爲我生成新的ID。它是如何做的?兩個sql查詢?它有效嗎?我沒有分析器。謝謝 – Marek 2011-03-17 09:55:54