【问题标题】:Entity Framework 4.0 and self-referencing tables; .SaveChanges() fails on .AddObject()Entity Framework 4.0 和自引用表; .SaveChanges() 在 .AddObject() 上失败
【发布时间】:2011-04-14 23:00:50
【问题描述】:

问题总结:

当使用自引用关系并尝试添加对象时,.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 列中添加了“允许 Nulls”,并刷新了我的模型……但这并没有什么不同。

表:PlanItem


PlanItem int PK,身份

ParentPlanItemID int , 允许为空

ItemText varchar(200)

来自模型设计器的参考约束:Principal = PlanItem;主键 = PlanItemId;相关属性 = ParentPlanItemId

来自模型设计师的关联:

关联集名称:FK_PlanItem_PlanItem

End1 多重性:1(PlanItem 之一)

End1 导航道具:PlanItem1

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

End2 导航:ParentPlanItem

名称:FK_PlanItem_PlanItem

【问题讨论】:

    标签: c# tsql entity-framework-4


    【解决方案1】:

    你试过直接设置吗

    planItem.ParentPlanItemReference
    

    财产?

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

    请查看this blog post 以获取更多参考。

    【讨论】:

    • 我不确定用什么设置这个属性... //planItem.ParentPlanItemReference = ((PlanItem)planItemsAddedHT[pi.ParentPlanItemId]).ParentPlanItemReference;
    【解决方案2】:

    事实证明,像我一样设置父属性不是问题。对于像这样的自引用表,多重性需要为(零或 1),并且 ParentPlanItemId 的属性需要允许为空。

    祝大家好运!

    【讨论】:

      猜你喜欢
      • 2013-01-15
      • 2017-02-17
      • 1970-01-01
      • 2015-07-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-07
      • 1970-01-01
      相关资源
      最近更新 更多