gpt4 book ai didi

c# - Entity Framework 4.0 和自引用表; .SaveChanges() 在 .AddObject() 上失败

转载 作者:太空宇宙 更新时间:2023-11-03 16:46:45 26 4
gpt4 key购买 nike

问题总结:

当使用自引用关系并尝试添加对象时,.SaveChanges() 失败并显示“无法确定‘PlannerModel.FK_PlanItem_PlanItem’关系的原则端。多个添加的实体可能具有相同的主键。”。

问题详情:

plannerContext = new PlannerEntities2();

var unitPlanQuery = from d in plannerContext.UnitPlans
where d.TeacherId == sourceTeacherId
orderby d.TeacherId
select d;

var planItem = new PlanItem();
ClonePlanItem(pi, planItem); // where pi is original PlanItem

planItem.ParentPlanItem = (PlanItem)planItemsAddedHT[pi.ParentPlanItemId];

// above object on right is the previously added PlanItem

plannerContext.PlanItems.AddObject(planItem);

plannerContext.SaveChanges();

我回到我的代码并对其进行注释,这样我就可以确定只调用了一次“plannerContect.PlanItems.AddObject(planItem)”。因此只有一个对象要插入。错误消息更改为:

“无法确定相关操作的有效顺序。由于外键约束、模型要求或存储生成的值,可能存在依赖关系。”

我返回并在 SQL Management Studio(顺便说一句,SQL Server 2008)的 ParentPlanItemId 列中添加了“允许空值”,并刷新了我的模型……但这并没有什么不同。

表:计划项


PlanItem int PK,标识

ParentPlanItemID int , 允许为空

项目文本 varchar(200)

来自模型设计器的引用约束:Principal = PlanItem;主键 = PlanItemId;从属属性 = ParentPlanItemId

模型设计师的关联:

关联集名称:FK_PlanItem_PlanItem

End1 多重性:1(PlanItem 之一)

End1 导航 Prop :PlanItem1

End2 多重性:*(PlanItem 的集合)

End2 Nav: ParentPlanItem

名称:FK_PlanItem_PlanItem

最佳答案

你试过直接设置吗

planItem.ParentPlanItemReference

属性(property)?

您实际上会将其设置为数据库中已存在的特定计划项目标识符(据我了解,您之前已经拥有)。我并不是说它会起作用,但值得一试。我已经多次使用这些 *Reference 属性来加快插入过程,有时还可以读取。

检查 this blog post以供进一步引用。

关于c# - Entity Framework 4.0 和自引用表; .SaveChanges() 在 .AddObject() 上失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5670687/

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