次のシナリオで問題が発生しています。
私のクラス構造は次のとおりです。
public class Owner
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual IList<Vehicle> Vehicles { get; set; }
}
public abstract class Vehicle
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
}
public abstract class PoweredVehicle : Vehicle
{
public virtual string EngineType { get; set; }
}
public class Car : PoweredVehicle
{
public virtual int Doors { get; set; }
}
public class Truck : PoweredVehicle
{
public virtual long MaxLoad { get; set; }
}
public class Bicycle : Vehicle
{
public virtual int FrameSize { get; set; }
}
流暢なマッピング:
public class OwnerMap : ClassMap<Owner>
{
public OwnerMap()
{
Id(x => x.Id).GeneratedBy.GuidComb();
Map(x => x.Name);
HasMany(x => x.Vehicles);
}
}
public class VehicleMap : ClassMap<Vehicle>
{
public VehicleMap()
{
Id(x => x.Id).GeneratedBy.HiLo("10");
Map(x => x.Name);
UseUnionSubclassForInheritanceMapping();
}
}
public class PoweredVehicleMap : SubclassMap<PoweredVehicle>
{
public PoweredVehicleMap()
{
Map(x => x.EngineType);
Abstract();
}
}
public class CarMap : SubclassMap<Car>
{
public CarMap()
{
Map(x => x.Doors);
}
}
public class TruckMap : SubclassMap<Truck>
{
public TruckMap()
{
Map(x => x.MaxLoad);
}
}
public class BicycleMap : SubclassMap<Bicycle>
{
public BicycleMap()
{
Map(x => x.FrameSize);
}
}
車と自転車を入れます。車両オブジェクトのリスト (車と自転車を含む) を持つ所有者を挿入しようとすると、次のエラーが発生します。
例外: NHibernate.Exceptions.GenericADOException: コレクションを挿入できませんでした: [NHibernateTest.Owner.Vehicles#8ace95bc-ad80-46d7-94c7-a11f012b67c6][SQL: UPDATE "Vehicle" SET Owner_id = @p0 WHERE Id = @p1] -- -> System.Data.SQLite.SQLiteException: SQLite エラー
具象クラスごとにテーブルを設定したのに、NHibernate が基本クラスを表す存在しないテーブルを更新しようとするのはなぜですか? このタイプのマッピングは、このシナリオではサポートされていませんか?
また、HasMany から HasManyToMany に変更すると、これは正常に機能します。