Può automapper di Fluent NHibernate gestire tipi di interfaccia?
-
19-09-2019 - |
Domanda
ho digitato questo esempio semplificato senza il beneficio di un IDE in modo da perdonare eventuali errori di sintassi. Quando provo a Automap questo ho una FluentConfigurationException quando tento di compilare le mappature -
"riferimenti associazione di classe non mappata
IEmployee
".
Immagino che se dovessi risolvere questo avrei avuto un errore simile quando incontra il riferimento a IEmployer
pure. Io non sono contrario alla creazione di un ClassMap manualmente ma preferisco automapper farlo invece.
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;
}
}
Ho provato con .IncludeBase<IEmployee>()
ma senza alcun risultato. Si comporta come ho mai chiamato IncludeBase a tutti.
è l'unica soluzione sia non utilizzare le interfacce tra le mie entità del dominio o ripiegare su un ClassMap definito manualmente?
In ogni opzione crea un problema significativo con il modo in cui la mia applicazione è stata progettata. Ho ignorato la persistenza fino a quando avevo finito l'attuazione di tutte le caratteristiche, un errore non sarò ripetere ancora una volta: - (
Soluzione
Non è una restrizione imposta da Fluent o la sua automapper, ma da NHibernate sé.
Pertanto, non credo che ci si arriva con la mappa della classe manuale. Dovrete perdere le interfacce nelle definizioni delle proprietà e della lista. È possibile mantenere le interfacce, ma proprietà mappate e collezioni necessario utilizzare i tipi concreti di cui NHibernate conosce.
Altri suggerimenti
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
}
}