0

상속 매핑을 위해 Fluent NHibernate 및 concrete per table 클래스를 사용하고 있습니다.Fluent NHibernate를 사용하는 서브 클래스에 대한 다른 시퀀스

추상 기본 클래스와 다른 두 개의 하위 클래스가 있습니다.

내 기본 클래스에는 Id 열이 있습니다. 생성 된 테이블은 괜찮습니다. 모든 테이블에는 고유 한 ID 열이 있습니다. 그러나이 두 테이블에 대한 시퀀스는 하나뿐입니다.

각 하위 클래스마다 다른 순서를 지정하고 싶습니다.

public abstract class Base 
{ 
    public virtual int Id { get; set; } 
} 

public class BaseMap : ClassMap<Base> 
{ 
    public BaseMap() 
    { 
     Id(x => x.Id).GeneratedBy.Native(); 
    } 
} 

public class A : Base 
{ 
    public virtual int AmountOfA { get; set; } 
} 

public class AMap : ClassMap<A> 
{ 
    public AMap() 
    { 
     Map(x => x.AmountOfA); 
    } 
} 

public class B : Base 
{ 
    public virtual int AmountOfB { get; set; } 
} 

public class BMap : ClassMap<B> 
{ 
    public BMap() 
    { 
     Map(x => x.AmountOfB); 
    } 
} 

Fluent NHibernate로 가능합니까?

+0

어떤 데이터베이스를 사용하고 있습니까? –

+0

Oracle 11g을 사용하고 있습니다. – besc

답변

0

이것은 의도적으로 설계된 동작입니다. ID가 데이터베이스에서 값 1 기본 클래스 Reference(x => x.SomeBase);에 대한 참조가있는 경우

  • 이 경우를 고려 고유하지 않기 때문에

    • session.Get<Base>(1);은 정의되지 않은 동작을 할 것이다 : 그것은 가능하지 않을 것 또는 B : A가 (1 이드) 알고 (ID : 1)

    참조 된 개체입니다 자료는 다음 Id 속성을 다시 자신의 엔티티로 매핑 해달라고하지만, 기본 클래스를 작성하는 경우에만이있는 경우

    public class BaseMap<T> : ClassMap<T> where T : Base 
    { 
        public BaseMap() 
        { 
         Id(x => x.Id).GeneratedBy.Native(); 
        } 
    } 
    
    public class AMap : BaseMap<A> 
    { 
        public AMap() 
        { 
         Map(x => x.AmountOfA); 
        } 
    } 
    
  • +0

    기본 클래스가 추상입니다. 따라서 데이터베이스에는 Base 테이블이 없습니다. – besc

    +0

    예제에는 BaseClass 테이블도 없습니다. 그러나 기본 클래스를 쿼리하고 bth 하위 클래스의 객체를 다시 얻을 수 있습니다. – Firo

    +0

    내 모든 클래스가 확장됩니다. version과 같은 일반 필드에 대해 BaseClass를 사용했습니다. recordDate와 디자인 모두 내 모든 엔터티는 동일한 시퀀스를 공유합니다. 이것은 내가 처음에는 원하지 않는 것입니다. – besc