gpt4 book ai didi

c# - Entity Framework 断开连接的图形和导航属性

转载 作者:行者123 更新时间:2023-11-30 14:29:48 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 6 Code First 和 Fluent API。我在 Visit 和 VisitPage 之间存在一对多关系(1 Visit 有很多 VisitPage 对象)。这是 POCO 类的简化版本:

访问:Id(身份)、UrlReferrer、Pages。VisitPage:Id(身份)、Name、Visit、VisitId

首先,我创建了一个 Visit 对象并向其添加了一个 VisitPage 对象。然后,我将它们插入数据库。到此为止一切正常。观察:VisitPage 中的 VisitId 属性在插入后自动设置(它从数据库中获取标识值并设置属性)。

然后,在断开连接的环境中,我向访问添加了一个新页面(我没有从数据库中获取 Visit 对象,这就是我所说的断开连接环境)。这个新页面引用相同的访问对象,但我没有设置 VisitId 属性,因为我认为 EF 应该根据 Visit 属性设置它。这就是问题所在,EF 没有设置它,事实上,它抛出一个异常,指出 Visit 属性和 VisitId 属性的值不匹配。我原以为 EF 能够在幕后执行此操作(例如在 DetectChanges 方法中),但事实并非如此。

异常信息:

发生引用完整性约束冲突:关系一端的“VisitId”属性值与另一端的“VisitPage.VisitId”属性值不匹配。

那么,我该如何解决呢?我看到两种可能的解决方案:1) 在连接环境中工作 --> 从 EF 获取 Visit 对象,然后添加页面对象。在这种情况下,EF 更新 VisitId 值并且它有效。2) 设置Visit对象后手动设置VisitId。

希望我已经说得够清楚了。如果没有,请告诉我。

最佳答案

要么这样做

visitPage.VisitId = VisitPage.Visit.Id;
visitPage.Visit = null;

context.Visits.Attach(visitPage.Visit);

context.Entry(visitPage.Visit).State = EntityState.Unchanged;

关于c# - Entity Framework 断开连接的图形和导航属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com