微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

实体框架4.0和自引用表; .SaveChanges在.AddObject上失败

如何解决实体框架4.0和自引用表; .SaveChanges在.AddObject上失败

| 问题摘要: 使用自引用关系并尝试添加对象时,.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 Studiosql 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
属性来加快插入和读取操作的速度。 检查此博客文章以获取更多参考。     ,事实证明,像我一样设置父属性不是问题。对于这样的自引用表,多重性需要为(零或1),并且ParentPlanItemId的属性需要允许为空。 为所有人加油!     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。