Fluent Nhibernate如何在子类映射中指定Id()

Fluent Nhibernate如何在子类映射中指定Id(),nhibernate,orm,fluent-nhibernate,Nhibernate,Orm,Fluent Nhibernate,我正在使Fluent NHibernate适应我们现有的遗留应用程序,并试图确定如何为所示的实体层次结构使用类映射和子类映射 // BaseObject contains database columns common to every table public class BaseObject { // does NOT contain database id column public string CommonDbCol1 { get; set; } public

我正在使Fluent NHibernate适应我们现有的遗留应用程序,并试图确定如何为所示的实体层次结构使用类映射和子类映射

// BaseObject contains database columns common to every table
public class BaseObject
{
    // does NOT contain database id column
    public string CommonDbCol1 { get; set; }
    public string CommonDbCol2 { get; set; }
    // ...
}

public class Entity1 : BaseObject
{
    public int Entity1Id { get; set; }
    // other Entity1 properties
}

public class Entity2 : BaseObject
{
    public int Entity2Id { get; set; }
    // other Entity2 properties
}
Entity1和Entity2的标识列是每个表唯一命名的。BaseObject包含所有实体共有的列。我没有使用自动映射,我想我可以在BaseObject上使用ClassMap,然后在每个实体上使用SubclassMap,如下所示:

public class Entity1Map : SubclassMap<Entity1>
{
    public Entity1Map()
    {
        Id(x => x.Entity1Id);
        // ...
    }
}
公共类Entity1Map:子类映射
{
公共实体1Map()
{
Id(x=>x.Entity1Id);
// ...
}
}
问题是,没有为子类映射定义Id()。那么,如何在每个Entity1Map、Entity2Map。。。(我们有100多个实体类都继承自BaseObject)实体特定的Id是什么


提前感谢您的任何见解

用流利的NHibernate或NHibernate都不可能做到这一点。您真的希望将类映射为子类,还是希望它们共享公共映射?如果您真的想要子类,那么您需要让它们共享标识列,而不是其他方式;如果不需要实际的子类,请在t:BaseObject中创建一个抽象的
类映射,并映射其中的公共属性

比如:

public abstract class BaseObjectMap<T> : ClassMap<T> where T : BaseObject
{
  public BaseObjectMap()
  {
    Map(x => x.CommonProperty1);
  }
}
公共抽象类BaseObjectMap:ClassMap,其中T:BaseObject
{
公共BaseObjectMap()
{
Map(x=>x.CommonProperty1);
}
}

我现在看到了区别,抽象类BaseObjectMap正是我想要的。完美的非常感谢!回答得很好。这就是我最初期望使用子类工作的方式。谢谢你周到的解决方案。