Кто-нибудь использует nHibernate с объектом Domain и объектом DTO, реализованным из общего интерфейса? Я пытаюсь разделить все свои атрибуты nHibernate на объект Domain, оставив мои DTO и интерфейс чистыми.
Проблема возникает с ошибками выбрасывания nHibernate, когда он пытается связать интерфейсы с конкретными классами.
NHibernate.MappingException: ассоциация ссылается на не сопоставленный класс: IContact
Я понимаю, почему жалуются на использование не спящего интерфейса, но я изо всех сил пытаюсь изобразить способ реструктуризации вокруг него. Скелетное воспроизведение моего кода изложено ниже, есть идеи, как лучше структурировать мой код?
public interface ICompany
{
IList<IContact> Contacts { get; set; }
}
public class CompanyDTO : ICompany
{
private IList<IContact> contacts;
public IList<IContact> Contacts { get { return this.contacts; } set { this.contacts = value; } }
}
[ActiveRecord]
public class Company : ActiveRecordBase<Company>, ICompany
{
private IList<IContact> contacts;
[HasMany(Inverse=true, Table="Contact", ColumnKey="CompanyId")]
[ScriptIgnore]
public IList<IContact> Contacts { get { return this.contacts; } set { this.contacts = value; } }
}
Edit:
Я хочу иметь общий интерфейс, чтобы я мог гарантировать, что они сохраняют одни и те же поля (т. Е. Опираться на компилятор для обеспечения их согласованности). Это также позволяет мне использовать DTO в части представления моего приложения, но приводит их к объектам домена для бизнеса и доступа к данным.
Кроме того, решение alex не работает, потому что контакты ICompany имеют тип IList, а не IList. Я хотел бы сохранить его как IContact, чтобы мой объект DTO не знал об объекте Contact Domain.