2013-02-14 102 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