实体框架,数据库范围的Guid表,插入顺序

时间:2014-12-10 19:16:42

标签: c# sql-server entity-framework

我们有一个同步框架,它使用全局SyncEntity表来跟踪哪些实体在什么时候被更新,这意味着我们有一个具有如下结构的全局表:

<dbo.SyncEntity>
ID int
EntityType int
EntityGuid uniqueidentifier

EntityType是一个与特定实体对应的枚举,以便我们知道在哪个表中查找该实体。 我们所有的表都有一个ID(PK)和一个GUID。

我已经从不同的实体表和SyncEntity表中的EntityGuid创建了一个外键约束。

这适用于现有数据,但是当我们使用EntityFramework插入新数据时,它不会将数据插入&#34;更正&#34;订单导致错误,因为尚未插入具有所需EntityGuid的SyncEntity。

我想我们可以在所有实体上添加属性SyncEntity但是我真的不想用该属性污染我们的域模型。

所以我的问题是,无论如何要确保将特定的实体类型作为第一个实体插入? 或者无论如何都要将Guid(在特定实体上)与EntityGuid(在SyncEntity上)之间的关系映射到没有导航属性。

1 个答案:

答案 0 :(得分:1)

我认为有两种方法可以缓解这个问题。

首先,您可以使用域事件来识别已创建新实体并引发事件,将实体本身作为参数传递,然后允许该事件创建新的SyncEntity插入它然后保存。这将填充您的ID,然后您可以将其分配给创建关系的新实体。

其次,您可以覆盖SaveChanges的{​​{1}}方法查看添加的实体,然后为每个实体创建一条新记录,然后将新的DbContext ID分配给实体。