1

我在没有使用 IDE 的情况下键入了这个简化的示例,因此请原谅任何语法错误。当我尝试自动映射时,当我尝试编译映射时,我得到一个 FluentConfigurationException -

“关联引用未映射的类 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 的唯一解决方案?

这两种选择都会对我的应用程序的设计方式造成重大问题。在完成所有功能实现之前,我忽略了持久性,我不会再重复这个错误:-(

4

2 回答 2

1

这不是 Fluent 或其 AutoMapper 施加的限制,而是 NHibernate 本身施加的限制。

因此,我认为您不会使用手动类图到达那里。您将不得不丢失属性和列表定义中的接口。您可以保留接口,但映射的属性和集合必须使用 NHibernate 知道的具体类型。

于 2010-01-08T17:43:56.783 回答
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
    }
}
于 2011-06-17T13:57:43.303 回答