问题摘要:
使用自引用关系并尝试添加对象时,.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 btw)的ParentPlanItemId列中添加了“允许空值”,并刷新了我的模型……但这没什么不同。
表:PlanItem
PlanItem int PK,标识
ParentPlanItemID int,允许为null
ItemText varchar(200)
来自模型设计器的引用约束:Principal = PlanItem;主键= PlanItemId;从属属性= ParentPlanItemId
模型设计师的关联:
AssociationSet名称:FK_PlanItem_PlanItem
End1多重性:1(一个PlanItem)
End1导航道具:PlanItem1
End2多用途:*(PlanItem的集合)
End2 Nav:ParentPlanItem
名称:FK_PlanItem_PlanItem
最佳答案
您是否尝试过直接设置
planItem.ParentPlanItemReference
属性?
您实际上会将其设置为数据库中已经存在的特定计划项目标识符(据我所知,您以前已经拥有过)。我并不是说它可以工作,但是值得一试。我多次使用这些
*Reference
属性来加快插入和读取操作的速度。检查this blog post以获取更多参考。