同じ Car エンティティにマップする 2 つの異なるデータ モデルがあります。同じエンティティに対して 2 つのマッピングが存在すると不平を言う nhibernate を停止するために、Car と同じ (したがって Car から継承する) ParkedCar という 2 番目のエンティティを作成する必要がありました。
public class Car
{
protected Car()
{
IsParked = false;
}
public virtual int Id { get; set; }
public bool IsParked { get; internal set; }
}
public class ParkedCar : Car
{
public ParkedCar()
{
IsParked = true;
}
//no additional properties to car, merely exists to support mapping and signify the car is parked
}
唯一の問題は、次のように Criteria API を使用してデータベースから Car を取得するときです。
SessionProvider.OpenSession.Session.CreateCriteria<Car>()
.Add(Restrictions.Eq("Id", 123))
.List<Car>();
このクエリは、ParkedCar データ モデルからの Car エンティティを返します。あたかも nhibernate がデフォルトで特殊なエンティティに設定されているかのようです。そして、マッピングは反抗的に正しい場所を探しています:
<class name="Car" xmlns="urn:nhibernate-mapping-2.2" table="tblCar">
<class name="ParkedCar" xmlns="urn:nhibernate-mapping-2.2" table="tblParkedCar" >
どうすればこれを止めることができますか?