単方向マッピングとCascade.Allをコレクションに使用すると、有効なFKを設定してから、SaveまたはSaveOrUpdateを実行することで、子のみを保存できますか?
新しい注文を作成し、有効なAccount_ idを設定してSaveOrUpdateを実行すると、データベースではAccount _idがNULLに設定されますが、エンティティには以前にAccount_idが設定されたままです。
なんで?これを機能させるために、おそらくSaveOrUpdateメソッドを変更できますか?
public class Account
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Order> Orders { get; set; }
//...
}
public class Order
{
public int Id { get; set; }
public int Account__id { get; set; }
public decimal Price { get; set; }
//...
}
マッピング:
public class AccountMap : ClassMap<Account>
{
public AccountMap()
: base()
{
Id(x => x.Id).GeneratedBy.Identity();
Map(x => x.Name);
HasMany(x => x.Orders).KeyColumn("Account__id").Cascade.All();
}
}
リポジトリ:
public void SaveOrUpdate(T instance)
{
using (ISession session = FnhManager.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
lock (instance)
{
session.SaveOrUpdate(instance);
transaction.Commit();
}
}
}
}