1 つのオブジェクトにアイテムのコレクションがあり、コレクションに最後に追加されたアイテムへの参照を保持する必要があるため、次のようにしています。
public class VehicleMap : BaseUniqueNamedEntityMap<Vehicle>
{
public VehicleMap():
base("vehicle_id", 40)
{
Not.LazyLoad();
//The main collection of items
HasMany(x => x.mVehicleModels)
.OrderBy("date asc")
.Cascade.AllDeleteOrphan()
.LazyLoad()
.KeyColumn("vehicle_id");
//Always updated to the last added item
References(x => x.mCurrentModel)
.Column("current_vehicle_model_relation_id")
.Cascade.None()
.Not.Nullable();
}
}
Vehicle クラスは次のようになります。
public class Vehicle : BaseUniqueNamedEntity
{
private IList<VehicleModelItem> mVehicleModels = new List<VehicleModelItem>();
[NotNull()]
private VehicleModelItem mCurrentModel;
public VehicleModel Model
{
get { return mCurrentModel.VehicleModel; }
set
{
//Check null before checking if values change, so we catch exceptions on constructor also
if (value == null)
throw new ArgumentNullException("Vehicle model cannot be null");
//When model is set, we update current model and insert it on list
mCurrentModel = new VehicleModelItem(this, value);
mVehicleModels.Add(mCurrentModel);
value.AddVehicleModelItem(mCurrentModel);
}
}
}
VehicleModelItem マッピング:
public VehicleModelItemMap() :
base("vehicle_model_relation_id")
{
Not.LazyLoad();
References(x => x.mVehicleModel)
.Column("vehicle_model_id")
.Cascade.None()
.LazyLoad(Laziness.Proxy)
.Not.Nullable();
Map(x => x.mDate)
.Column("date")
.Not.Nullable();
}
問題は、次のような新しい車両を作成する場合です。
Vehicle vehicle = new Vehicle();
vehicle.Model = anyExitingVehicleModel;
session.save(vehicle);
この場合、VehicleModelItem のプロパティ Vehicle に対して、「null または非 null プロパティに設定された一時オブジェクト」を取得します。
この問題は、車両の mCurrenveVehicleModel プロパティに関連しています。削除すると、すべてが機能しますが、最後に追加されたアイテムを追跡できませんでした (少なくともこの方法では)。
VehicleModelItem と vehicle の両方に対して save を呼び出す必要なく、これを機能させる方法はありますか?
これらのコレクションでカスケードの組み合わせをいくつか試しましたが、成功しませんでした。
ありがとうございました