tipos de interface punho AutoMapper de Can Fluent NHibernate?
-
19-09-2019 - |
Pergunta
Eu digitei este exemplo simplificado, sem o benefício de um IDE de modo perdoar quaisquer erros de sintaxe. Quando tento AUTOMAP este eu recebo um FluentConfigurationException quando tento compilar os mapeamentos -
"referências associação de classe não mapeada
IEmployee
. "
Eu imagino que se eu fosse para resolver este eu recebo um erro semelhante quando encontra a referência ao IEmployer
também. Eu não sou contra a criação de um ClassMap manualmente, mas eu prefiro AutoMapper fazê-lo em seu lugar.
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;
}
}
Eu tentei usar .IncludeBase<IEmployee>()
mas sem sucesso. Ele age como se eu nunca chamou IncludeBase em tudo.
É a única solução para ou não usar interfaces em meus entidades de domínio ou cair para trás em um ClassMap definido manualmente?
opção ou cria um problema significativo com a forma como o meu aplicativo foi projetado. Ignorei persistência até que eu tinha terminado a implementação de todas as características, um erro eu não vou repetir mais uma vez: - (
Solução
Não é uma restrição imposta pela Fluente ou seu AutoMapper, mas por si só NHibernate.
Por isso, não acho que você chegar lá com o mapa classe manual. Você vai ter que perder as interfaces nas definições de propriedade e de lista. Você pode manter as interfaces, mas propriedades mapeadas e coleções deve usar os tipos concretos de que NHibernate sabe.
Outras dicas
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
}
}