Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对子类的子类使用鉴别器_C#_Fluent Nhibernate - Fatal编程技术网

C# 对子类的子类使用鉴别器

C# 对子类的子类使用鉴别器,c#,fluent-nhibernate,C#,Fluent Nhibernate,这个问题似乎很普遍,但我对fluentnhibernate还不熟悉,我所有的搜索结果都没有找到任何有用的东西 我有一个类似于此的类层次结构: public class Person { public virtual int Id { get; protected set; } public virtual string GivenName { get; set; } public virtual string FamilyName { get; set; } } pub

这个问题似乎很普遍,但我对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()
    {
    }
}
公共类PersonMap:ClassMap
{
公众人物地图()
{
Id(x=>x.Id);
Map(x=>x.GivenName);
Map(x=>x.FamilyName);
区分子类子列(“类型”);
}
}
公共类EmployeeMap:子类Map
{
公共雇员地图()
{
Map(x=>x.WhoAmI);
}
}
公共类BossMap:子类映射
{
公共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()
    {
    }
}
公共类PersonMap:ClassMap
{
公众人物地图()
{
Id(x=>x.Id);
Map(x=>x.GivenName);
Map(x=>x.FamilyName);
}
}
公共类EmployeeMap:子类Map
{
公共雇员地图()
{
Map(x=>x.WhoAmI);
}
}
公共类BossMap:子类映射
{
公共BossMap()
{
}
}
我的问题:是否有可能(在fluentnhibernate中)将这些类映射到两个表中,即

  • 包含从Person类派生的所有属性的一个人表,以及
  • 一个包含从Employee类派生的所有属性的Employee表,加上一个区分普通员工和老板的鉴别器

如果您只是将BossMap别名为EmployeeMap:

public class BossMap : EmployeeMap {}

您应该得到所需的映射。

不太可能。我似乎得到的只是FluentConfigurationException,包括PersonMap中的DiscriminateSubClassesOnColumn和不带的DiscriminateSubClassesOnColumn。异常消息是什么?最内部的异常是“重复的类/实体映射示例。FirstProject.Entities.Employee”您是否尝试过在没有
BossMap
的情况下对
Boss
类进行子类化?由于这两个类之间的DB结构没有区别,所以您可能不需要mapping类。这似乎也没有帮助。只是“没有persister for:Examples.FirstProject.Entities.Boss”。即使我把老板交给员工。