Почему я не могу добавить объект в базу данных?(Mvc3) - PullRequest
1 голос
/ 23 ноября 2011

Это довольно простой вопрос: когда кто-то нажимает «Изменить план» в моем проекте ASP.NET MVC - он не редактирует, а создает новый план с помощью. Вы можете увидеть это более четко в моем ответе на мое изложение здесь: Как мне дублировать объект?

Теперь я хочу сделать то же самое с его ссылками, и я сделал это так:

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. Существующий объект находится в неизмененном состоянии.

Я буду рад узнать, почему это происходит.

1 Ответ

3 голосов
/ 23 ноября 2011

Не похоже, что вы сохраняете после добавления FeaturePlanBaseSet.Вам нужно вызвать db.SaveChanges() last, чтобы сохранить все изменения.

EDIT: также кажется, что вы читаете существующую запись 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); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...