0

単方向マッピングと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();
                }
            }
        }
    }
4

1 に答える 1

0

OrdermappingsクラスAccount__idで列をマップしなかったようです。入れてみてください

Map(x => x.Account_id)

OrderMapクラスに追加します。

于 2012-07-31T10:27:08.380 に答える