如何在实体框架中有条件地生成DatabaseGenerated GUID

本文关键字:DatabaseGenerated GUID 有条件 实体 框架 | 更新日期: 2023-09-27 18:18:10

我使用实体框架6作为我的ORM与SQL Server数据库交谈。在插入新记录时,我有两种情况:

  1. 记录的GUID为空,在这种情况下我添加属性

    DatabaseGenerated(DatabaseGeneratedOption.Identity)]

    在我的poco上的ID字段上面,数据库很高兴地为我的记录生成一个新的顺序GUID。

    这个场景最适合索引。我的客户端首先与一个API对话,该API试图将记录插入数据库,并让数据库生成一个顺序的GUID。


  • 记录的GUID已经设置,在这种情况下GUID应该在数据库中设置。但是,EF忽略了这一点,并要求数据库生成一个新的顺序GUID。

    此场景是在客户端离线或无法访问API的情况下。在这种情况下,它将使用自己生成的GUID在本地保存数据,然后尝试稍后将其保存到数据库。

  • 我已经做了一些搜索,似乎找不到任何方法,只有有条件地要求数据库生成一个新的GUID,如果一个还没有设置。这可能吗?

    谢谢!

    如何在实体框架中有条件地生成DatabaseGenerated GUID

    是。使用EF

    的AddOrUpdate方法

    看到AddOrUpdate

    两者不能同时拥有。在本例中,您将EF配置为让数据库在每次插入记录时创建一个新ID, EF将始终这样做。当一条记录被跟踪为插入时,它将始终遵循此行为。

    您需要一种方法来跟踪哪些实体无法到达要插入的服务器,并且当客户端应用程序在线时能够同步更改。

    我将创建一个不同的本地数据关系,允许跟踪本地存储中的实体。这需要更多的努力,但这是值得的。