【问题标题】:What is the recommended identity generation approach in Entity framework?实体框架中推荐的身份生成方法是什么?
【发布时间】:2011-07-17 01:07:15
【问题描述】:

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

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

StoreGeneratedPattern = None 

而不是

StoreGeneratedPattern = Identity

我什至不确定当我将其设置为“计算”时会发生什么。

有什么建议吗?有没有与此相关的好文章,因为 msdn 的解释性不是很好。我在架构中主要使用带有少量 GUID 的整数。

【问题讨论】:

    标签: c# .net entity-framework identity


    【解决方案1】:

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

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

    编辑:

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

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

    【讨论】:

    • 谢谢,这主要回答了我的问题。还有一个困境。我可以将 db 中的 id 列设置为不是身份但仍然是主键。在这种情况下,EF 将为我生成新的 id。它是怎么做的?两个sql查询?它有效率吗?我没有分析器。谢谢
    猜你喜欢
    • 1970-01-01
    • 2011-08-08
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2010-11-14
    • 1970-01-01
    相关资源
    最近更新 更多