0

我正在使用 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 所需的字段,但它需要明确声明要映射的每个字段,这首先破坏了使用自动映射器的全部意义。我也无法找到如何使用投影在数据库中创建新条目,并将额外的字段(即地址和头发颜色)设置为默认值。我尝试提供覆盖以将 Person 和 PersonSummary 设置为使用同一个表,但正如预期的那样,Fluent 抱怨它。

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

4

1 回答 1

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");
    }
}
于 2013-02-15T09:46:46.180 回答