我正在使用实体框架6代码优先和Fluent API。我在Visit和VisitPage之间有一对多的关系(1 Visit有许多VisitPage对象)。这是POCO类的简化版本:
参观
:Id(标识),UrlReferrer,Pages。
访问页面
:Id(身份),名称,
访问,访问ID
首先,我创建一个Visit对象并向其中添加一个VisitPage对象,然后将它们插入到DB中。观察:VisitPage中的VisitId属性在插入后自动设置(它从DB中获取标识值并设置属性)。
然后,在一个断开连接的环境中,我向访问添加一个新页面(我没有从DB中获取visit对象,这就是我所说的断开连接环境)。这个新页面引用的是同一个访问对象,但我没有设置VisitId属性,因为我认为EF应该基于visit属性设置它。这就是问题所在,EF没有设置它,事实上,它抛出了一个异常,表示Visit属性和VisitId属性的值不匹配。我原以为EF能够在幕后(例如,在DetectChanges方法中)做到这一点,但事实并非如此。
异常消息:
发生引用完整性约束冲突:关系一端的“VisitId”属性值与另一端的“VisitPage.VisitId”的属性值不匹配。
那么,我该如何解决这个问题?我认为有两种可能的解决方案:
1) 在连接的环境中工作-->从EF获取Visit对象,然后添加页面对象。在这种情况下,EF会更新VisitId值,并且可以正常工作。
2) 设置Visit对象后,手动设置VisitId。
我希望我已经足够清楚了。如果没有,请告诉我。