这是一个非常简单的问题:当有人点击我的ASP.NET MVC项目中的“编辑计划”时 - 他不会编辑,而是创建一个新的计划。你可以在我的答案中更清楚地看到它:How do I duplicate an object?
现在我想对它的引用做同样的事情,我这样做了:
var featurePlans = db.FeaturePlanBaseSet.Where(f => f.PlanId == plan.Id).ToList();
db.PlanSet.AddObject(plan);
db.SaveChanges();
for (var i = 0; i < featurePlans.Count(); i++ )
{
featurePlans[i].Plan = plan;
db.FeaturePlanBaseSet.AddObject(featurePlans[i]);
}
我执行AddObject
时会添加计划,但Feature
不是。
我收到此错误:
ObjectStateManager中已存在具有相同键的对象。 现有对象处于Unchanged状态。
我很高兴知道为什么会这样。
答案 0 :(得分:3)
添加FeaturePlanBaseSet后似乎没有保存。您需要最后拨打db.SaveChanges()
以保存所有更改。
编辑:您还可以从数据库中读取现有的FeaturePlanBaseSet记录,然后再添加该记录。下一行将检索现有记录。
var featurePlans = db.FeaturePlanBaseSet.Where(f => f.PlanId == plan.Id).ToList();
添加featurePlans[i]
时,您要添加现有记录。如果您计划添加新记录,请按以下步骤操作:
for (var i = 0; i < featurePlans.Count(); i++ )
{
var featurePlan = new FeaturePlanBaseSet();
featurePlan.Plan = plan;
...set other properties
db.FeaturePlanBaseSet.AddObject(featurePlan);
}