2013-02-14 68 views
0

我用流利的automapper我的类映射和我目前有包含摘要信息的人一个基类,包含其全部信息的派生类:保存流利/ NHibernate的预测

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的整个点。我还无法找到如何使用投影在数据库中创建新条目,并将额外字段(即Address和HairColor)设置为默认值。我试着提供一个覆盖设置Person和PersonSummary使用同一张表,但正如预期的一样,Fluent对此抱怨。

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

每在AutomappingConfiguration层次继承映射

回答

0

使用表,使用鉴别列

更新:从自动映射排除,然后使用下面的classmaps或合并的想法变成自动映射

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

谢谢您的回答,但我除非我不能正确理解你,否则我不认为鉴别器列在这里是很好的解决方案。鉴别器列允许将不同的“类型”保存在同一个表中。在我的情况下,我希望能够保存“PersonSummary”记录并将所有多余字段(即Address和HairColor)设置为其默认值。然后,我希望能够以Person或PersonSummary的形式加载该记录。预测完全按照我的需要处理加载部分,这是我努力工作的保存部分。 – 2013-02-20 10:09:46