나는이 오래된 스레드 알고 있지만 새로운 독자의 관심 :
를 제출 모델에 대한 EF 개체가 볼 수있는 VS 2012, MVC 4, EF 4.0을 사용하여 내 관찰을 바탕으로
다시 컨트롤러로 양식. 컨트롤러
:
public ActionResult SubmitEFObject(tblData data, FormCollection col)
"데이터"만 충전도 (@ Html.xxxFor)에 사용되는 특성을 가질 것이다.
"데이터"가 만들어지면 게시 된 FormCollection이 데이터 속성을 설정하는 데 사용되는 것처럼 보입니다. 예를 들어 DataID와 같이 사용되지 않은 속성이 있으면 data.DataID에 null/default 값이 있습니다. 보기에 "@ 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의 필드 [] 문자열을 통해 반복하여보다 일반적인 사용하여 반사 또는 어쩌면 더 효율적으로 만들 수 있지만, 내 목적이 '충분'입니다.
DB 호출이 저장소에 있습니다.내가 알아 내고자하는 것은 EF를 가장 잘 활용할 수있는 시간이라고 부를 때입니다. 당신의 질문이가는 한, 나는이 질문으로 그것을 결정하려고 노력하고있다. 동시 바인딩과 더 나은 상태를 추적 할 수 있도록 EF 개체를 초기에 쿼리하여 바인드를 모델링하면 EF를 사용하는 것이 가장 좋습니다. – RailRhoad
"모델 바인딩"에 직접 EF 개체를 노출시키지 않고 자체 도메인 개체 또는 DTO를 사용하고 해당 개체를 EF 개체에 매핑합니다. –