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

Mar*_*rek 10 .net c# identity entity-framework

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

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

StoreGeneratedPattern = None 
Run Code Online (Sandbox Code Playgroud)

代替

StoreGeneratedPattern = Identity
Run Code Online (Sandbox Code Playgroud)

我甚至不确定当我将它设置为Calculated时会发生什么.

有什么建议?有没有与此相关的好文章,因为msdn不是很清楚.我主要在我的架构中使用少量GUID的int.

Lad*_*nka 20

检查我的博客文章有关StoreGeneratedPattern.它解释了Identity和之间的一些差异Computed.使用StoreGeneratedPatternID(PK)时,None如果在应用程序中Identity分配ID 或在DB中分配ID,则正确的选项是.Computed选项为"无效",因为在每个实体持久性期间(也在更新中)更改值时使用此选项,而不是ID的情况.

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

编辑:

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

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