Обновление: Я был идиотом. Все было сохранено на диске, но @Html.EditorFor(x => ...)
не показывал значения.Entity Framework не сохраняет сложные сущностные изменения на SaveChanges
невиртуальных подсвойств сложное образование Framework объекта не обновляется после того как я называю db.SaveChanges();
, несмотря на явно говоря рамки Entity, что экземпляр был изменен с:
db.Entry(myComplexEntity).State = System.Data.Entity.EntityState.Modified;
плоских свойств в объекте обновляются, но ни один из (не виртуальных) объектов внутри объекта, например, значения в Step1
:
public class Wizard
{
[Key]
public Guid WizardId { get; set; }
public DateTime CreatedOn { get; set; }
public Step1 Step1 { get; set; }
// ...
public Step5 Step5 { get; set; }
public Wizard()
{
Step1 = new Step1();
// ...
Step5 = new Step5();
}
}
Я подтвердил значения в input
являются обязательными правильно, но, несмотря на явно, значения не сохраняются в базе данных. Вот как я устанавливаю значения:
using (var db = new MyDataContext())
{
wizard = db.Wizards.First(x => x.WizardId == id);
wizard.UpdatedOn = DateTime.Now; // this is being saved to the DB
// The following properties are not persisted to the database:
wizard.Step1.Capacity = input.Capacity;
wizard.Step1.Color = input.Color;
wizard.Step1.Conditions = input.Conditions;
wizard.Step1.SerialNumber = input.SerialNumber;
wizard.Step1.Model = input.Model;
db.Entry(wizard).State = System.Data.Entity.EntityState.Modified;
db.SaveChanges();
}
Почему значения не виртуальных под-свойств моего сложного объекта не сохраняются? Еще более озадачивающим, один из простых «шаговых» объектов сохраняется на диске, но большинство из них не являются.
Полагаю, вы сначала используете код? Как выглядят таблицы базы данных? Являются ли шаги помечены как '[ComplexType]'? – flindeberg
Вам нужно включить 'Step1', когда вы извлекаете« волшебник », или делаете его« виртуальным », чтобы он был ленивым. В противном случае контекст не знает об этом и не может обнаружить никаких изменений, которые должны быть сохранены – Colin