保存Fluent/NHibernate投影

保存Fluent/NHibernate投影,nhibernate,automapper,fluent,Nhibernate,Automapper,Fluent,我正在使用Fluent automapper映射我的类,目前我有一个基类包含个人的摘要信息,一个派生类包含个人的完整信息: interface IPersonSummary { string Name { get; set; } DateTime? DOB { get; set; } } interface IPerson : IPersonSummary { string Address { get; set; } string HairColor { get

我正在使用Fluent automapper映射我的类,目前我有一个基类包含个人的摘要信息,一个派生类包含个人的完整信息:

interface IPersonSummary
{
    string Name { get; set; }
    DateTime? DOB { get; set; }
}

interface IPerson : IPersonSummary
{
    string Address { get; set; }
    string HairColor { get; set; }
}

public class PersonSummary : IPersonSummary
{
    public string Name { get; set; }
    public DateTime? DOB { get; set; }
}

public class Person : PersonSummary, IPerson
{
    public string Address { get; set; }
    public string HairColor { get; set; }
}
我知道可以使用投影从数据库中只加载填充PersonSummary所需的字段,但它需要显式地声明每个要映射的字段,这就破坏了首先使用automapper的全部意义。我还无法找到如何使用投影在数据库中创建一个新条目,并将额外字段(即地址和头发颜色)设置为默认值。我尝试提供一个覆盖,将Person和PersonSummary设置为使用同一个表,但正如预期的那样,Fluent对此表示不满


如何将这些类映射到同一个表?

在使用鉴别器列的AutomappingConfiguration中使用逐层次表继承映射

更新:将它们从自动映射中排除,并使用下面的类映射,或者将想法合并到自动映射中

class SharedMap<T> : ClassMap<T> where T : IPersonSummary
{
    public SharedMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        Map(x => x.DOB);
    }
}

class PersonSummaryMap : SharedMap<PersonSummary>
{
    public PersonSummaryMap()
    {
        SchemaAction.None();
    }
}

class PersonMap : SharedMap<Person>
{
    public PersonMap()
    {
        Map(x => x.Address).Default("nowhere");
        Map(x => x.HairColor).Default("black");
    }
}
class-SharedMap:ClassMap其中T:IPersonSummary
{
公共共享地图()
{
Id(x=>x.Id);
Map(x=>x.Name);
Map(x=>x.DOB);
}
}
类PersonSummaryMap:SharedMap
{
PublicPersonSummaryMap()
{
SchemaAction.None();
}
}
类PersonMap:SharedMap
{
公众人物地图()
{
Map(x=>x.Address).Default(“无处”);
贴图(x=>x.HairColor).Default(“黑色”);
}
}

谢谢您的回答,但除非我没有正确理解您的意思,否则我不认为在这里使用鉴别器列是一个很好的解决方案。鉴别器列允许在同一个表中保存不同的“类型”。在我的例子中,我希望能够保存一个“PersonSummary”记录,并将所有多余的字段(即地址和头发颜色)设置为默认值。然后,我希望能够以Person或PersonSummary的形式加载该记录。投影完全按照我想要的方式处理加载部分,这是我正在努力工作的保存部分。