1

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 にフォールバックする唯一の解決策はありますか?

どちらのオプションも、アプリケーションの設計方法に重大な問題を引き起こします。すべての機能の実装が完了するまで永続性を無視しました。この間違いは二度と繰り返されません :-(

4

2 に答える 2

1

これは、Fluent またはその AutoMapper による制限ではなく、NHibernate 自体による制限です。

したがって、手動のクラス マップでそこにたどり着けるとは思いません。プロパティとリストの定義でインターフェイスを失う必要があります。インターフェイスは保持できますが、マップされたプロパティとコレクションは、NHibernate が認識している具象型を使用する必要があります。

于 2010-01-08T17:43:56.783 に答える
0
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
    }
}
于 2011-06-17T13:57:43.303 に答える