更新我的POCO的子對象與CodeFirst有問題。我的POCO的如下代碼優先不更新子對象
public class Place
{
public int ID { get; set;
public string Name { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public int ID { get; set;
public string AddressLine { get; set; }
public string City { get; set; }
public virtual State State { get; set; }
}
public class State
{
public int ID { get; set;
public string Name { get; set; }
}
我有一個視圖來編輯地方及其孩子的所有領域。除了是DropDownList的狀態外,所有屬性都是文本框。
當用戶點擊保存按鈕時,視圖將返回所有已填充的Place屬性,但只填充了ID的狀態除外,因爲它的值來自DropDownList且Name爲空。
在編輯POST方法,我有以下代碼:從PlaceBLL類
if (ModelState.IsValid)
{
bool isNewPlace = place.ID == -1;
//Hack, State name is empty from View, we reload
place.Address.State = new StateBLL().GetByID(place.Address.State.ID);
new PlaceBLL().Update(place);
return RedirectToAction("Index");
}
和更新代碼如下
protected override void Update(Place place)
{
MyDbContext.Instance().Set<Address>().Attach(place.Address);
MyDbContext.Instance().Entry(place.Address).State = System.Data.EntityState.Modified;
MyDbContext.Instance().Set<State>().Attach(place.Address.State);
MyDbContext.Instance().Entry(place.Address.State) = System.Data.EntityState.Modified;
MyDbContext.Instance().SaveChanges();
}
當用戶編輯將對象的所有字段都是正確更新,除了狀態,當用戶改變某個地方的狀態時,這個改變並不會持久到數據庫,如果看起來Code首先沒有檢測到用戶的狀態改變。
你知道爲什麼代碼首先不檢測一個地方的狀態改變值嗎?
謝謝。
你的更新方法看起來很瘋狂。你有沒有充分的理由不使用基本的EF來做到這一點,即選擇 - >修改 - > saveChanges? –