2010-01-24 2 views
3

"ABC"(특성 ID 및 제목)라는 entityframework 엔터티가 있습니다.ASP.NET MVC에서 Entity Framework 엔터티 편집 및 업데이트

업데이트 레코드보기에서 ID를 숨김 필드로 추가했으며 제목은 텍스트 상자입니다.

컨트롤러는 뭔가 다음과 같습니다

public ActionResult UpdateAction(ABC obj) 

내가 모든 벌금과 OBJ의 공정 수 - 즉, 제목 및 ID를. 내가 할

this.TryUpdateModel(original); 

:

이제
var original = (from x in base.context.ABC where x.id == obj.id).Single(); 

내가 업데이트 모델을해야한다고 생각, 원래의 변화를 반영하기 :

이제

데이터베이스에서 레코드를 업데이트하기 위해, 나는 원래 엔티티를 읽어 오류 : | ... 열 ID를 변경할 수 없다는 것을 나타냅니다.

The property 'id' is part of the object's key information and cannot be modified. 

원래 개체에 속성을 수동으로 할당하고 싶지 않습니다.

다른 대안이 될 수 있습니다

TryUpdateModel(original, new string[] { "Title" }, form.ToValueProvider()); 

을하지만 문자열을 싫어 - 또한, 내 객체가 20 개 속성과 같은 : |

누군가 더 좋은 패턴을 제안 할 수 있습니까?

RGDS

+0

나는 해결책을 찾을 수 있다고 생각 @ http://stackoverflow.com/questions/922402/strongly-typed-asp-net-mvc- with-ado-net-entity-framework – effkay

답변

2
public class ControllerExt : Controller 
{ 
    protected void UpdateModel<TModel>(TModel model, params Expression<Func<TModel, object>>[] property) where TModel : class 
    { 
     var props = new List<string>(property.Length); 
     foreach (var p in property) 
     { 
      var memberExpression = RemoveUnary(p.Body) as MemberExpression; 
      if (memberExpression == null) 
      { 
       throw new NullReferenceException("Can not retrieve info about member of {0}".FormatThis(typeof(TModel).Name)); 
      } 
      props.Add(memberExpression.Member.Name); 
     } 
     this.UpdateModel(model, props.ToArray()); 
    } 

    private static Expression RemoveUnary(Expression body) 
    { 
     var unary = body as UnaryExpression; 
     if (unary != null) 
     { 
      return unary.Operand; 
     } 
     return body; 
    } 
} 

예 :

UpdateModel<MyModel>(model, x => x.PropertyFromMyModel_1, x => x.PropertyFromMyModel_2); 
관련 문제