2009-11-18 1 views
1

내 데이터베이스에 공통 열을 공유하는 여러 테이블이 있습니다. 수정 날짜, 수정 날짜 등 모든 테이블에 이러한 열이있는 것은 아닙니다. . LINQ to Enties를 사용하여asp.net mvc : 엔티티에 LINQ를 사용할 때 모델에 대한 사용자 지정 바인딩을 만드는 방법

이 필드의 자동 바인딩을 처리 할 수있는 사용자 지정 바인더 클래스를 만들고 싶습니다. 각 엔티티 클래스에 사용자 정의 바인딩 클래스가 없어도이를 수행 할 수 있습니까? 방법에 있는가

public override Object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
{ 
    var obj = (Foo)base.BindModel(controllerContext, bindingContext); 
    var user = controllerContext.HttpContext.User.Identity; 
    obj.modified_by = user.Name; 
    obj.modified_date = DateTime.Now; 
    return obj; 
} 

: global.asax.cs에서

, 위해 Application_Start을() : FooBinder.cs에서 다음

ModelBinders.Binders.Add(typeof(Foo),new FooBinder()); 

여기

는 내가 가지고있는 코드입니다 이것을 일반화하여 여러 유형을 처리 할 수 ​​있습니까?

답변

1

바인더가 아닌 저장소에서이 작업을 수행합니다. 공통 필드와의 인터페이스가 있습니다 (Modified on). 우리는 T4 템플릿을 사용하여 엔티티를 코드화하는 부분 클래스로 인터페이스를 구현합니다.

0

반사를 사용하여 필드를 이름으로 설정할 수 있으므로 속성 이름을 foreach 할 수 있습니다. 이것은 모델 바인더가 반사 자체를 사용하여 속성에 도달하기 때문에 큰 문제는 아닙니다. 그런 다음 "공용"유형 각각에 대한 바인더를 등록 할 수 있습니다. 즉, 엔티티가 필요한 모든 필드가 있는지 확인하여 리플렉션을 사용하여 OK 일 수도 있습니다. 따라서 새 엔티티를 추가하더라도 작동합니다.

바인더를 기본값으로 호출 한 다음 필드를 업데이트하십시오.