为什么我不能将对象添加到数据库中? (MVC3)

时间:2011-11-23 12:27:35

标签: c# asp.net-mvc-3 add

这是一个非常简单的问题:当有人点击我的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状态。

我很高兴知道为什么会这样。

1 个答案:

答案 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); 
}