更新:我是个白痴。一切都被持久化到磁盘,但@Html.EditorFor(x => ...)
没有显示值。
在我调用db.SaveChanges();
后,尽管已明确告知实体框架实例已更改为:
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();
}
为什么我的复杂对象的非虚拟子属性值未被保存?更令人费解的是,其中一个简单的“步骤”对象是持久存储到磁盘,但大多数都没有。
答案 0 :(得分:0)
你应该改变
public Step1 Step1 { get; set; }
为此(为了在模型中创建外键):
public int Step1Id {get;set;}
public virtual Step1 Step1 { get; set; }
我总是使用这样的东西:
Step1 s1 = new Step1();
// ... assign values here ...
db.Step1s.Add(s1);
db.SaveChanges();
wizard.Step1Id = s1.Id;
db.SaveChanges();