我们有一个同步框架,它使用全局SyncEntity表来跟踪哪些实体在什么时候被更新,这意味着我们有一个具有如下结构的全局表:
<dbo.SyncEntity>
ID int
EntityType int
EntityGuid uniqueidentifier
EntityType是一个与特定实体对应的枚举,以便我们知道在哪个表中查找该实体。 我们所有的表都有一个ID(PK)和一个GUID。
我已经从不同的实体表和SyncEntity表中的EntityGuid创建了一个外键约束。
这适用于现有数据,但是当我们使用EntityFramework插入新数据时,它不会将数据插入&#34;更正&#34;订单导致错误,因为尚未插入具有所需EntityGuid的SyncEntity。
我想我们可以在所有实体上添加属性SyncEntity但是我真的不想用该属性污染我们的域模型。
所以我的问题是,无论如何要确保将特定的实体类型作为第一个实体插入? 或者无论如何都要将Guid(在特定实体上)与EntityGuid(在SyncEntity上)之间的关系映射到没有导航属性。
答案 0 :(得分:1)
我认为有两种方法可以缓解这个问题。
首先,您可以使用域事件来识别已创建新实体并引发事件,将实体本身作为参数传递,然后允许该事件创建新的SyncEntity
插入它然后保存。这将填充您的ID,然后您可以将其分配给创建关系的新实体。
其次,您可以覆盖SaveChanges
的{{1}}方法查看添加的实体,然后为每个实体创建一条新记录,然后将新的DbContext
ID分配给实体。