문제

내 엔티티에 표준 속성을 추가하고 싶은 시나리오가 있습니다. 즉, 모든 관련 엔티티에 예를 들어 1 int 및 2 개의 문자열 속성이 적용됩니다. 나는 100 개가 넘는 매핑 파일을 가지고 있지만 대부분은이 새로운 속성을 호스트하는 것은 아닙니다. 수업에서는 이것을 쉽게 정의 할 수 있습니다. 그러나 매핑에서 유틸리티 나 XSLT를 작성하고이를 적용하는 것 외에는 참조를 찾지 못했습니다.재사용 가능한 정의 방법u003Cgenerator> 최대 절전 모드 매핑의 요소).

그러나이 "표준"매핑에서 속성을 추가/수정/제거 할 수 있기를 원합니다.

모든 답변에 대한 thx

edit1 : 추가하고 싶은 매핑의 예

<property name="TimeOfEdit" column="TimeOfEdit" type="DateTime" not-null="true"/>
<many-to-one name="EditedBy" column="FK_EditedBy" cascade="save-update" not-null="true" />

EDIT2 : NH 2.1.1 XML 엔티티가 작동하지 않기 때문에 (NH-1236) NH를 던질 것이기 때문에 허용 된 솔루션을 제거했습니다.

도움이 되었습니까?

해결책 5

이를 수행하는 유일한 것은 동적 매핑을 사용하는 것 같습니다 (http://ayende.com/blog/archive/2008/05/01/dynamic-mapping-with-nhibernate.aspx)

따라서 내 엔티티가 새로운 속성에 사용할 인터페이스를 이미 정의했기 때문에 (iauditable이라고 말하면) NH- 시션 초기화에서 적절한 코드를 실행하는 문제 일뿐입니다.

Configuration cfg = new Configuration() Mappings mappings = cfg.CreateMappings(); 
foreach (var persistentClass in mappings.Classes) 
{ 
   if (persistentClass.MappedClass is IAuditable)
   {
     ...
   }
}

그리고

cfg.BuildSessionFactory();

약 85 개의 클래스에 사용할 준비가 되려면 성능 영향은 무시할 수 있습니다.

다른 팁

이 속성이 클래스에서 어떻게 구현되는지에 따라 다릅니다.

그들이 모두 정의 된 경우 기본 클래스 또는 인터페이스, 기본 클래스 또는 인터페이스에서 한 번 매핑하고 사용을 도출 할 수 있습니다. union-subclass. 몇 가지 제한 사항이 있습니다. 읽다 Nhibernate 문서 의이 장 그것에 대해.

수업에 합류하기로 결정했다면, 당신은 그것들을 사용자 유형. 이것은 구성 요소와 유사하지만 사용자 유형의 유형 이름, 길이 및 다른 것과 같은 것을 지정할 수 있습니다. 여전히 각 열 이름을 지정해야합니다.

다른 옵션이 있습니다 : 사용할 수 있습니다 XML 엔티티. 이것은 nhibernate에 의해 지원되는 XML의 다소 원시 기능입니다. 읽다 NH 참조 문서 의이 장 언급 된 곳.

특정 사례에 대한 특수 코드 생성기를 만드는 것이 유일한 옵션입니다.

옵션 1:
-기본 클래스 에서이 3 가지 속성을 정의하십시오

-당신의 엔티티 가이 기지에서 물려 받으십시오

-'클래스 계층 당 테이블 설정'

Option 2:

-이 3 가지 속성을 구성 요소로 정의하십시오.

-재사용 된 하나의 파일 로이 3 가지 속성에 대한 매핑을 가질 수 있습니다.

당신은 살펴볼 수 있습니다 fluentnhibernate, 그것은 당신을 위해 매핑 작업을 단순화합니다. 자동 매핑을 사용하면 이러한 속성을 정의하기 위해서는 추상 기본 클래스 만 있으면됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top