я следующее заявление EF данные:Entity Object прилагается/не прилагается к DbContext
class Model1{
public Int32 Id{ get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public string Prop3 { get; set; }
public virtual Model3 PropModel31{ get; set; }
public virtual Model3 PropModel32{ get; set; }
}
class Model3{
public Int32 Id{ get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
}
Я прошу мои объекты в разных местах:
//db being the datacontext
//Partial view of Model1
var model1s = from model1 in db.Model1
select new {
model1.Id,
model1.Prop1,
model1.Prop2,
model1.PropModel31,
model1.PropModel32,
};
И, потом, я пытаюсь обновить модель сущность,
public ActionResult Save(Model1 model1)
{
db.Model1.Attach(model1);
var entry = db.Entry(model1);
entry.Property(e => e.Prop1).IsModified = true;
entry.Property(e => e.Prop2).IsModified = true;
...
db.SaveChanges();
}
, но я получаю следующее исключение:
Объект с тем же ключом уже существует в ObjectStateManager. ObjectStateManager не может отслеживать несколько объектов с одним и тем же ключом.
Если я прокомментирую db.Model1.Attach (model1);, тогда я получаю обратное исключение:/
Member 'IsModified' не может быть вызван для свойства 'Prop1', потому что объект типа 'Model1' не существует в контексте. Чтобы добавить объект в контекстный вызов, добавьте метод Add или Attach для DbSet
Итак, я предполагаю, что свойства объекта Model3 привязаны к контексту, но как это можно проверить, исправить?
Благодарим за помощь.
так почему именно вы отключите отслеживание изменений, а затем ожидаете, что контекст будет отслеживать изменения в любом случае? – Claies
Извините, не уверен насчет вашего вопроса? Скажем, я не хочу отслеживать, как я могу сохранить свою сущность в db? – Yoann
Это точка отслеживания, так что контекст знает, что было изменено в модели по сравнению с базой данных. использование AsNoTracking в основном приводит к тому, что контекст не отслеживает, поэтому, когда вы меняете объект и затем пытаетесь сохранить его, у вас есть конфликт, как будто вы добавляете новую запись в конфликт с существующим элементом базы данных. – Claies