我知道這是一個古老的線程,但在新讀者的興趣:
基於使用VS 2012,MVC 4和EF 4.0與具有EF對象爲提交的模型視圖我的看法形成回控制器。
在控制器:
public ActionResult SubmitEFObject(tblData data, FormCollection col)
「數據」 將只具有在填充視圖(@ Html.xxxFor)中使用的性質。
看起來,當創建「數據」時,發佈的FormCollection用於設置數據的屬性。如果您有一個未使用的屬性,例如DataID,則data.DataID將具有空值/默認值。將「@ Html.Hidden(m => m.DataID)」添加到您的視圖中,然後填充DataID。
作爲「快速ñ骯髒」的方式與這個工作,我創建了一個會與數據庫中的「數據」合併進來的「數據」,並返回合併對象的方法:
// Note: error handling removed
public tblData MergeWithDB(DBContext db, tblData data, params string[] fields)
{
tblData d = db.tblData.Where(aa => aa.DataID == data.DataID).Single();
if (fields.Contains("Field1")) d.Field1 = data.Field1;
if (fields.Contains("Field2")) d.Field2 = data.Field2;
if (fields.Contains("Field3")) d.Field3 = data.Field3;
// etc...
return d;
}
在控制器:
public ActionResult SubmitEFObject(tblData data, FormCollection col)
{
DataEntities db = new DataEntities();
tblData d = MergeWithDB(db, data, col.AllKeys);
db.SaveChanges();
}
你可以讓這個更通用的使用反射或也許更有效的通過字符串[]字段,而不是所有的IFS循環,但對於我而言,這是「足夠好」。
我的數據庫調用存儲在庫中。我試圖找出什麼時候打電話給他們以最大限度地利用EF。至於你的問題,我試圖用這些問題來確定。看起來我最好使用EF,如果我模型綁定查詢EF對象提前,以便它可以使用併發性和更好的跟蹤狀態。 – RailRhoad 2009-12-29 16:36:58
我不會將EF對象直接暴露給「模型綁定」,我將使用自己的域對象或DTO,並將這些對象映射到EF對象上。 – 2009-12-29 18:38:51