如何在实体框架中有条件地生成DatabaseGenerated GUID
本文关键字:DatabaseGenerated GUID 有条件 实体 框架 | 更新日期: 2023-09-27 18:18:10
我使用实体框架6作为我的ORM与SQL Server数据库交谈。在插入新记录时,我有两种情况:
-
记录的GUID为空,在这种情况下我添加属性
DatabaseGenerated(DatabaseGeneratedOption.Identity)]
在我的poco上的ID字段上面,数据库很高兴地为我的记录生成一个新的顺序GUID。
这个场景最适合索引。我的客户端首先与一个API对话,该API试图将记录插入数据库,并让数据库生成一个顺序的GUID。
-
记录的GUID已经设置,在这种情况下GUID应该在数据库中设置。但是,EF忽略了这一点,并要求数据库生成一个新的顺序GUID。
此场景是在客户端离线或无法访问API的情况下。在这种情况下,它将使用自己生成的GUID在本地保存数据,然后尝试稍后将其保存到数据库。
我已经做了一些搜索,似乎找不到任何方法,只有有条件地要求数据库生成一个新的GUID,如果一个还没有设置。这可能吗?
谢谢!
是。使用EF
的AddOrUpdate方法看到AddOrUpdate
两者不能同时拥有。在本例中,您将EF配置为让数据库在每次插入记录时创建一个新ID, EF将始终这样做。当一条记录被跟踪为插入时,它将始终遵循此行为。
您需要一种方法来跟踪哪些实体无法到达要插入的服务器,并且当客户端应用程序在线时能够同步更改。
我将创建一个不同的本地数据关系,允许跟踪本地存储中的实体。这需要更多的努力,但这是值得的。