2010-01-08 76 views
1

我輸入這個簡化的例子沒有IDE的好處,所以原諒任何語法錯誤。當我嘗試自動映射這個我得到一個FluentConfigurationException當我試圖編譯的映射 -能否流利NHibernate的AutoMapper句柄接口類型?

「協會引用未映射類 IEmployee。」

我想如果我要解決這個問題,當遇到對IEmployer的引用時,我會得到類似的錯誤。我不反對手動創建一個ClassMap,但我更喜歡AutoMapper。

public interface IEmployer 
{ 
    int Id{ get; set; } 
    IList<IEmployee> Employees { get; set; } 
} 

public class Employer: IEmployer 
{ 
    public int Id{ get; set; } 
    public IList<IEmployer> Employees { get; set; } 
    public Employer() 
    { 
    Employees = new List<IEmployee>(); 
    } 
} 

public interface IEmployee 
{ 
    int Id { get; set; } 
    IEmployer Employer { get; set; } 
} 

public class Employee: IEmployee 
{ 
    public int Id { get; set;} 
    public IEmployer Employer { get; set;} 
    public Employee(IEmployer employer) 
    { 
    Employer = employer; 
    } 
} 

我一直在使用.IncludeBase<IEmployee>()但無濟於事嘗試。它的行爲就像我從來沒有稱爲IncludeBase。

是否在我的域實體中使用接口或回退到手動定義的ClassMap是唯一的解決方案?

任何一個選項都會對我的應用程序的設計方式造成嚴重的問題。我忽略了持續,直到我完成了實現所有的功能,一個錯誤,我不會:-(

回答

1

再次重複這不是流利或其AutoMapper施加的限制,而是由NHibernate的本身。

因此,我不要以爲你會用手動類映射到那裏,你必須丟失屬性和列表定義中的接口,你可以保留接口,但映射的屬性和集合必須使用NHibernate知道的具體類型

+0

http://stackoverflow.com/questions/845536/845714#845714表明這是/是和與流利問題當通信編寫了。我檢查了問題跟蹤器,但找不到它。我不知道這個修補程序是否已經進入了1.0 RTM? –

0
public class PersonMap : ClassMap<Person> 
{ 
    public PersonMap() 
    { 
     Id(x => x.Id); 
     Map<Address>(x => x.Address); // Person.Address is of type IAddress implemented by Address 
    } 
}