0

我使用Fluent NHibernate和表每个具体类用于继承映射。流利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); 
    } 
} 

这可能与流利NHibernate的?

+0

您使用的数据库是? – 2013-03-25 11:25:44

+0

我正在使用Oracle 11g – besc 2013-03-25 13:33:10

回答

0

这是设计。

  • session.Get<Base>(1);将有不确定的行为,因为ID不是唯一的

  • 考虑的情况时,有一个参照基类Reference(x => x.SomeBase);与数据库中的值1:这是不可能的知道,如果A(ID:1)或B(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 2013-05-09 12:59:18

+0

我的示例中没有BaseClass的表。然而,你可以查询基类,并获得bth子类的对象 – Firo 2013-05-10 04:38:57

+0

我的所有类都扩展我使用BaseClass的通用字段,如版本,recordDate与您的设计我的所有实体将共享相同的序列。这是我首先不想要的。 – besc 2013-05-11 17:00:08