代码之家  ›  专栏  ›  技术社区  ›  Kenneth Cochran

Fluent NHibernate的AutoMapper能否处理接口类型?

  •  1
  • Kenneth Cochran  · 技术社区  · 16 年前

    我在没有IDE的情况下输入了这个简化的示例,所以请原谅任何语法错误。当我尝试自动映射时,当我尝试编译映射时,会出现FluentConfigurationException-

    “关联引用未映射的类 IEmployee ."

    我想如果我要解决这个问题,当它遇到 IEmployer

    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>()

    唯一的解决方案是不在我的域实体中使用接口还是依赖于手动定义的类映射?

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   David M    16 年前

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

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

        2
  •  0
  •   Scott Rickman    15 年前
    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
        }
    }
    
    推荐文章