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