2011-02-04 2 views
0

간단한 날짜로 면도기에 날짜를 표시하는 가장 좋은 방법을 찾으려고 할 때, 데이터 주석을 우연히 발견했습니다. 다양한 메타 데이터를 추가 할 수있어서 아주 좋았습니다. 모델.NHibernate에서 DataAnnotations 사용하기

여기에 catch가 있습니다. NHibernate가 Fluent NHibernate에 의해 구성되어 있습니다. NHibernate는 생성 된 프록시 클래스에 대한 특성을 갖고 있지 않습니다.

속성을 복사하도록 강제 할 수있는 방법이 있나요, 또는 내가보기에 직접 내 모델 클래스를 사용해서는 안되며 대신 어떻게든지 모델 (T4 템플릿?)

+0

속성은 지속성 모델이 아닌 ViewModel의 일부 여야합니다. – Phill

+0

@Phil, 나는 이것을 게시 한 이후로 그것을 알았지 만, 다른 의견을 몇 개 볼만한 가치가 있다고 생각했습니다. AutoMapper를 사용하여 일부를 지키려고합니다. –

답변

2

보기도메인 모델 (nhibernate)에 대한 클래스를 분리하는 것이 좋습니다. 하나에서 다른 것으로 번역하려면 automapper을 사용하십시오.

+0

이것이 제가 한 일입니다. –

+2

매핑에 신경 쓰지 마라. Session.Query 과 같이 Session을 쿼리하여 뷰 모델을 직접 빌드합니다 .Select (새 ViewModel). 그것은 당신에게 시간과 성능을 많이 줄 것입니다. 단지 Session.Get 를 사용하여 전체 도메인 객체를 변이시킬 수 있습니다. – mickdelaney

1

을 변환 NHibernate에 모델 당신이 부분 수업을 사용하고 있습니까? 그렇다면 별도의 메타 데이터 클래스를 만들어 데이터 주석으로 데코 레이팅 할 수 있습니다. 나는 최근에 비슷한 문제가있어서 내 질문에이 대답을 얻었다. here. 기본적으로 생성 된 NHibernate 클래스와 같은 이름의 부분 클래스를 생성합니다. 그런 다음 해당 클래스와 동일한 필드를 사용하여 메타 데이터 클래스를 만들고 적절하게 꾸며낸 다음 해당 메타 데이터 클래스를 만든 부분 클래스에 적용하여 클래스를 다시 생성하더라도 부분 클래스가 생성되지 않도록하고 DataAnnotations 주위.

[MetadataType(typeof(PersonMetadata))] 
public partial class Person { 

} 

public class PersonMetadata { 

    [Required] 
    [Display(Name = "First Name")] 
    public string FirstName; 
} 

출처 : Austin Lambthis answer를 통해.

+0

답변이 원래 질문을 해결하는지 여부는 모르지만 메타 데이터 클래스는 도메인과보기 모델 모두에 연결될 수 있습니다. –