Я знаю, что это старый нить, но в интересах новых читателей:
Основываясь на своих наблюдениях, используя VS 2012, MVC 4 и EF 4.0 с тем, что есть объект EF для модели, которая представляет вернитесь к контроллеру.
На контроллере:
public ActionResult SubmitEFObject(tblData data, FormCollection col)
"данные" будут иметь только свойство, используемое в представлении (@ Html.xxxFor), заполненное.
Похоже, что когда создается «данные», опубликованный FormCollection используется для установки свойств данных. Если у вас есть свойство, которое не было использовано, например DataID, то data.DataID будет иметь значение null/default. Добавьте «@ Html.Hidden (m => m.DataID)» к вашему представлению и THEN 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();
}
Вы могли бы сделать это более универсальное с помощью отражения или, может быть более эффективным, пробегает по строке [] полям вместо все МСФА, но для моих целей это было «достаточно хорошо».
Мои вызовы db находятся в репозитории.То, что я пытаюсь выяснить, - это когда назвать их, чтобы лучше использовать EF. Что касается вашего вопроса, я пытаюсь определить это с этими вопросами. Похоже, что я лучше всего использую EF, если я сначала привяжу запрос к объекту EF, чтобы он мог использовать параллелизм и лучшее состояние отслеживания. – RailRhoad
Я бы не стал подвергать объект EF непосредственно «привязке модели», я буду использовать свой собственный объект домена или DTO и сопоставить этот объект с объектом EF. –