保存Fluent / NHibernate预测

时间:2013-02-14 04:36:29

标签: nhibernate automapper fluent

我正在使用Fluent自动化程序来映射我的类,我目前有一个基类,其中包含一个人的摘要信息和一个包含其完整信息的派生类:

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所需的字段,但是它需要明确声明要映射的每个字段,这种方式首先会破坏使用自动播放器的整个过程。我还无法找到如何使用投影在数据库中创建新条目,并将额外字段(即Address和HairColor)设置为其默认值。我已经尝试提供一个覆盖来设置Person和PersonSummary以使用相同的表,但正如预期的那样Fluent抱怨它。

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

1 个答案:

答案 0 :(得分:0)

在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");
    }
}