1
更新:我當時是一個白癡。一切都被堅持到磁盤,但@Html.EditorFor(x => ...)
沒有顯示值。在實體實體框架不會在SaveChanges上持續複雜的實體更改
db.Entry(myComplexEntity).State = System.Data.Entity.EntityState.Modified;
平性質:
一個複雜的實體框架對象的非虛擬子屬性我打電話db.SaveChanges();
儘管明確地告訴實體框架的實例已與改變後未更新正在更新,但對象內部沒有(非虛擬)對象,例如在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
當你檢索'wizard'時,你需要包含'Step1',或者使其成爲'virtual',以便它被延遲加載。否則上下文不知道它,並且不能檢測到應該保存的任何更改 – Colin