我对StoreGeneratedPattern最高效的方式感兴趣。
过去我习惯让DB为我生成ID,但我想知道设置是否有任何优势
StoreGeneratedPattern = None
而不是
StoreGeneratedPattern = Identity
当我将其设置为Calculated时,我甚至不确定会发生什么。
有什么建议吗?有没有与此相关的好文章,因为msdn不是很清楚。我主要使用的是我的架构中几乎没有GUID的内容。
答案 0 :(得分:20)
检查我的blog post StoreGeneratedPattern
。它解释了Identity
和Computed
之间的一些差异。使用StoreGeneratedPattern
作为ID(PK)时,如果在应用程序中分配ID,则正确的选项为None
;如果在DB中分配ID,则为Identity
。 Computed
选项为“无效”,因为在每个实体持久性期间(也在更新中)更改值时使用此选项,而不是ID的情况。
Identity
和Computed
之间的区别是执行的SQL命令的行为。如果属性为Identity
,EF将在Insert后选择该值并将其返回给您的应用程序。如果属性为Computed
,EF将在插入和更新后选择该值并将其返回给您的应用程序。
编辑:
StoreGeneratedPattern.Identity
与DB中的Identity无关。您不需要在DB中拥有Identity,并且您可以使用一些不同的技术(guid或触发器的默认值)设置ID,但仍需要StoreGeneratedPattern.Identity
才能将值返回给您的应用程序。
一旦您使用Identity
或Computed
EF将始终跟随每个插入或更新选择数据库生成列。没有它它就行不通。这些命令在单个往返数据库中执行,因此几乎没有性能影响。