Может ли AutoMapper Fluent NHibernate обрабатывать типы интерфейсов? - PullRequest
1 голос
/ 08 января 2010

Я набрал этот упрощенный пример без использования 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?

Любой из этих вариантов создает значительную проблему с тем, как спроектировано мое приложение. Я игнорировал постоянство до тех пор, пока не завершил реализацию всех функций, и я больше не буду повторять эту ошибку: - (

Ответы [ 2 ]

1 голос
/ 08 января 2010

Это не ограничение, наложенное Fluent или его AutoMapper, но само NHibernate.

Поэтому я не думаю, что вы попадете туда с ручной картой классов. Вам придется потерять интерфейсы в определениях свойств и списков. Вы можете сохранить интерфейсы, но отображаемые свойства и коллекции должны использовать конкретные типы, о которых знает NHibernate.

0 голосов
/ 17 июня 2011
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
    }
}
...