实体框架中推荐的身份生成方法是什么?

时间:2011-03-17 00:28:07

标签: c# .net entity-framework identity

我对StoreGeneratedPattern最高效的方式感兴趣。

过去我习惯让DB为我生成ID,但我想知道设置是否有任何优势

StoreGeneratedPattern = None 

而不是

StoreGeneratedPattern = Identity

当我将其设置为Calculated时,我甚至不确定会发生什么。

有什么建议吗?有没有与此相关的好文章,因为msdn不是很清楚。我主要使用的是我的架构中几乎没有GUID的内容。

1 个答案:

答案 0 :(得分:20)

检查我的blog post StoreGeneratedPattern。它解释了IdentityComputed之间的一些差异。使用StoreGeneratedPattern作为ID(PK)时,如果在应用程序中分配ID,则正确的选项为None;如果在DB中分配ID,则为IdentityComputed选项为“无效”,因为在每个实体持久性期间(也在更新中)更改值时使用此选项,而不是ID的情况。

IdentityComputed之间的区别是执行的SQL命令的行为。如果属性为Identity,EF将在Insert后选择该值并将其返回给您的应用程序。如果属性为Computed,EF将在插入和更新后选择该值并将其返回给您的应用程序。

编辑:

StoreGeneratedPattern.Identity与DB中的Identity无关。您不需要在DB中拥有Identity,并且您可以使用一些不同的技术(guid或触发器的默认值)设置ID,但仍需要StoreGeneratedPattern.Identity才能将值返回给您的应用程序。

一旦您使用IdentityComputed EF将始终跟随每个插入或更新选择数据库生成列。没有它它就行不通。这些命令在单个往返数据库中执行,因此几乎没有性能影响。