流利的NHibernate的AutoMapper可以处理接口类型?(Can Fluent NHibe

2019-10-19 02:00发布

我打这个简单的例子没有一个IDE的利益所以请原谅所有语法错误。 当我尝试自动映射这个我得到一个FluentConfigurationException当我试图编译的映射 -

“协会引用未映射类IEmployee 。”

我想,如果我是来解决这个当它遇到的参考我会得到一个类似的错误IEmployer为好。 我不反对以手动创建一个类映射,但我更喜欢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可言。

是不是没有在我的域实体使用接口或依傍手动定义的类映射唯一的解决办法?

无论是选择与我的应用程序的设计方式产生了显著的问题。 我忽略了持续,直到我完成了实现所有的功能,一个错误,我不会再重复:-(

Answer 1:

它不是通过液态或其AutoMapper施加的限制,而是由NHibernate的本身。

因此,我不认为你会用手工课地图到达那里。 你必须失去财产和列表定义的接口。 你可以保持接口,但映射属性和集合必须使用的具体类型,其中NHibernate的知道。



Answer 2:

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
    }
}


文章来源: Can Fluent NHibernate's AutoMapper handle Interface types?