2012-10-24 66 views
5

問題看起來很普通,但我對fluentnhibernate很陌生,我所有的搜索都沒有發現任何有用的東西。使用鑑別子的子類的子類

我有類似這樣的類層次結構:

public class Person 
{ 
    public virtual int Id { get; protected set; } 
    public virtual string GivenName { get; set; } 
    public virtual string FamilyName { get; set; } 
} 

public class Employee : Person 
{ 
    public virtual string WhoAmI { get { return "I am just an Employee"; } protected set { } } 
} 

public class Boss : Employee 
{ 
    public override string WhoAmI { get { return "I am the boss."; } protected set { } } 
} 

即一個基類和兩個子類(一個來自另一個)。子類具有相同的簽名,但基類沒有。

下映射會用掉約三個類的實例的所有信息到同一個表:

public class PersonMap : ClassMap<Person> 
{ 
    public PersonMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.GivenName); 
     Map(x => x.FamilyName); 
     DiscriminateSubClassesOnColumn("type"); 
    } 
} 

public class EmployeeMap : SubclassMap<Employee> 
{ 
    public EmployeeMap() 
    { 
     Map(x => x.WhoAmI); 
    } 
} 

public class BossMap : SubclassMap<Boss> 
{ 
    public BossMap() 
    { 
    } 
} 

離開了DiscriminateSubClassesOnColumn將產生三個表:

public class PersonMap : ClassMap<Person> 
{ 
    public PersonMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.GivenName); 
     Map(x => x.FamilyName); 
    } 
} 

public class EmployeeMap : SubclassMap<Employee> 
{ 
    public EmployeeMap() 
    { 
     Map(x => x.WhoAmI); 
    } 
} 

public class BossMap : SubclassMap<Boss> 
{ 
    public BossMap() 
    { 
    } 
} 

我的問題:有可能(以流利的方式)將這些類映射到恰好兩個表中,即,具有

  • 一個Person表,包含從Person類派生的所有屬性,以及
  • Employee表包含從Employee類派生的所有屬性,以及歧視正常員工和老闆的鑑別器?

回答

0

如果只是別名BossMap到EmployeeMap的:

public class BossMap : EmployeeMap {} 

你應該得到你所需要的映射。

+0

不是。我似乎得到的都是FluentConfigurationExceptions,都使用PersonMap中的DiscriminateSubClassesOnColumn而沒有。 – nasenbohrer

+0

什麼是異常消息? –

+0

最內側的異常是「重複的類/實體映射Examples.FirstProject.Entities.Employee」 – nasenbohrer