0

私は次のエンティティを持っています:

public class Worker
{
 public int WorkerID {get;set;}
 public string Name { get;set;}
 public int version { get;set;}
}

public class TransferOrder
{
  public int TransferOrderID { get;set;}
  public Worker workerTobeTransfered{get;set;}
  public int version { get;set;}    
}

そして私は流暢なnhibernateで自動マッピングを使用しています。次のようにTransferOrderを保存しようとすると:

TransferOrder order = new TransferOrder();
order.Worker = new Worker(){WorkerID = 1};
Session.Save(order);

しかし、データベースでは、TransferOrderテーブルのworkerIDはNULLですか?しかし、私がワーカーにバージョンを与えると、それは通常どおりに保存されますか?

TransferOrder order = new TransferOrder();
order.Worker = new Worker(){WorkerID = 1,Version = 1};
Session.Save(order);

0でない限り、ワーカーにどのバージョン番号を付けるかは重要ではないことに注意してください。また、workerID=1でデータベースにワーカーを保存しています。

どうすればこれを処理できますか?なぜワーカーにバージョンを提供する必要があるのですか?nhibernateはワーカーが保存されていることを確認していますか?そしてなぜそれがそれをするべきなのか?

4

2 に答える 2

0

多分これはシーンリオです:

Work.WorkerIDはWorkテーブル内のID列であり、ID列エントリのみで構成される行をテーブルに挿入することはできません。

ただし、Work.Versionにも値を指定すると、有効な挿入が作成されます。

于 2010-10-06T14:35:33.993 に答える
0

「バージョン」は、楽観的同時実行性チェックのためにNHibernate属性に自動マップされる可能性があります。自動マッピングのデフォルト設定についてGoogle経由で何も見つからないため、Fluent NHibernateを使用してマッピングXMLを生成し、それが何を使用しているかを確認します。

于 2010-10-07T20:30:40.667 に答える