共通のインターフェイスから実装された Domain オブジェクトと DTO オブジェクトで nHibernate を使用しているものはありますか? すべての 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; } }
}
編集:
それらが同じフィールドを保持していることを確認できるように、共通のインターフェイスが必要です (つまり、一貫性を保つためにコンパイラーに依存します)。また、アプリケーションのビュー部分で DTO を使用することもできますが、ビジネスおよびデータ アクセスのために DTO をドメイン オブジェクトにキャストします。また、ICompany の Contacts のタイプが IList ではなく IList であるため、alex のソリューションは機能しません。DTO オブジェクトが Contact Domain オブジェクトを認識しないように、IContact として保持したいと考えています。