1

나는 엔티티에 몇 가지 표준 속성을 추가하고 싶습니다. 내가 예를 들어 의미합니다. 1 개의 int 및 2 개의 문자열 속성이 모든 관련 엔터티에 적용됩니다. 나는 100 개가 넘는 매핑 파일을 가지고 있지만 대부분이 새로운 속성에 대한 호스트가 아닙니다. 클래스에서 쉽게 이것을 정의 할 수 있습니다. 그러나 매핑에서 유틸리티 또는 xslt를 작성하고이를 적용하는 것 이외에 다른 참조를 찾지 못했습니다 (How to define reusable <generator> elements in hibernate mapping).n-hibernate 매핑에 재사용 가능한 속성을 정의하는 방법이 있습니까?

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

에 대한

들으

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는 특정 사건에 대한 특별한 코드 생성기 유일한 옵션은 생성

답변

0

그것은 유일하게이 작업을 수행하는 것 같다, 내가 이미 (IAuditable을 말할 수) 내 실체가 새로운 속성에 사용할 수있는 인터페이스를 정의한 이후 같은 동적 매핑 (http://ayende.com/Blog/archive/2008/05/01/Dynamic-Mapping-with-NHibernate.aspx)

을 사용하는 것입니다 그 북반구 세션 초기화시 해당 코드를 실행의 문제는

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

다음

cfg.BuildSessionFactory(); 

그것을 선을 가지고 d 위로 사용할 준비가되었습니다. 약 85 클래스에 대해 성능 영향은 무시할 수 있습니다.

0

"DTD이 XML 문서에서 금지"가 발생합니다.

+0

원하는 매핑을 조작하고 요소를 주입하는 일회용 스크립트/유틸리티를 의미합니까? – Jaguar

+0

정보에 대한 일종의 소스를 취하고 최대 절전 모드가 예상하는 매핑 파일을 만드는 유틸리티를 말합니다. 기존 매핑 파일을 읽고 추가/제거 할 수 있지만 원본 파일 (예 : 소스 파일의 특수한 주석)이 있고 전체 출력 파일을 생성하는 프로세스를 선호합니다. 그렇지 않으면 누군가가 코드 생성기를 혼란스럽게하는 방식으로 출력 파일을 조작하면 허위 오류가 발생합니다. 그는 벌레를 가질 것이고 당신은 그렇게하지 않을 것입니다. –

1

이러한 속성이 클래스에 구현되는 방법에 따라 다릅니다.

기본 클래스 또는 인터페이스에 모두 정의 된 경우 기본 클래스 또는 인터페이스에 한 번 매핑하고 union-subclass을 사용하여 파생시킬 수 있습니다. 몇 가지 제한 사항이 있습니다. 그것에 대해 this chapter in the NHibernate documentation을 읽으십시오.

클래스에 넣을 경우 사용자 유형으로 매핑 할 수 있습니다. 이것은 구성 요소와 유사하지만 사용자 유형에 유형 이름, 길이 및 기타 항목을 지정할 수 있습니다. 각 열 이름을 지정해야합니다.

는 또 다른 옵션이있다 : 당신이 XML 엔티티를 사용할 수 있습니다. 이것은 NHibernate에 의해 지원되는 XML의 오히려 원시적 인 기능이다. 언급 된 곳의 this chapter in the NH reference documentation을 읽으십시오.

+0

XML 엔터티가 최상의 솔루션 인 것처럼 보입니다.이 접근법의 단점은 "다형성 쿼리를 수행 할 때 NHibernate가 SQL UNION을 생성하지 않는다는 것입니다." NH가 맵핑을 사용하기 전에 적절한 XML이 매핑과 결합되지 않았습니까? 매핑? 게다가, 나는 그것을 만드는 데 문제가 있는데, 난 XML 엔터티 사용의 실용 예제를 찾을 수없는 것. – Jaguar

+0

마지막으로 나는 xml 엔티티에서 작동하도록 만들었지 만, -ies로 정의하는 것은 거의 불가능합니다. 정의 XML에는 단일 루트 노드 만있을 수 있으므로 -s는 실제로 실행 가능합니다. - 실행이 불가능한 경우 – Jaguar

0

옵션 1 : 엔티티 해놔
기본 클래스에있는이 3 곳 -Define

이 기지에서 상속

-set

옵션 2 위로 '클래스 계층 당 테이블'

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

- 재사용되는 하나의 파일에서 이러한 3 개의 속성에 대한 매핑을 가질 수 있습니다.

+0

요소에 요소가 필요합니다. 불행히도 구성 요소 솔루션에는 원하는 클래스가 아닌 추가 클래스가 필요합니다. 첫 번째 옵션은 실행 가능하지만 추상 클래스의 하위 클래스는 추상 클래스의 매핑 파일에 정의되어 있기 때문에 피하기를 원합니다. 반면 A 클래스의 클래스 매핑 파일로 이동하는 솔루션을 선호합니다. 그 상속/추상 클래스의 속성을 주입 – Jaguar

0

당신은, fluentNHibernate 한 번 봐 걸릴 수 있습니다 그것은 당신의 매핑 작업을 단순화합니다. 자동 매핑을 사용하면 이러한 속성을 정의하기 위해 추상 기본 클래스 만 필요할 수 있습니다.

+0

불행히도 표준 xml 매핑은 이미 배치되었습니다. – Jaguar

관련 문제