我正在使用Entity Framework 6作为我的ORM来与SQL Server数据库进行通信。插入新记录时我有两种情况:
记录的GUID为空,在这种情况下我添加属性
DatabaseGenerated(DatabaseGeneratedOption.Identity)]
在我的POCO上的ID字段上方,数据库很乐意为我的记录生成一个新的顺序GUID。
此方案最适合编制索引。我的客户首先与一个API进行对话,该API尝试将记录插入数据库并让数据库生成顺序GUID。
已设置记录的GUID,在这种情况下,应在数据库中设置GUID。但是,EF忽略了这一点,并要求数据库生成新的顺序GUID。
此方案是在客户端处于脱机状态或无法访问API的情况下。在这种情况下,它将使用自己生成的GUID在本地保存数据,然后尝试将其保存到数据库中。
我已经做了一些搜索,似乎无法找到任何方法只有条件地要求数据库生成新的GUID(如果尚未设置)。这可能吗?
谢谢!
答案 0 :(得分:0)
是。使用方法AddOrUpdate of EF
请参阅AddOrUpdate
答案 1 :(得分:0)
你不能同时拥有两者。在这种情况下,您正在配置EF以允许数据库在每次插入记录时创建新ID,EF将始终执行此操作。将记录作为插入进行跟踪时,它将始终遵循此行为。
您需要一种方法来跟踪哪些实体无法访问要插入的服务器,以及客户端应用程序何时在线时能够同步更改。
我会创建一个不同的本地数据关系,以便跟踪本地存储中的实体。它需要更多的努力,但值得付出努力。