0

Fluent NHibernate を使用してデータベースに親オブジェクトを挿入しています。このオブジェクトには子があり、この子は既にデータベースに永続化されていますが、この子の ID しか持っていません。

外部キー(子)のみを使用して親オブジェクトを挿入し、IDを子オブジェクトに設定するにはどうすればよいですか?

例:

ObjectParent parent = new ObjectParent();
ObjectChild child = new ObjectChild();

child.Id = 5; // 5 is the id from the child in the database
parent.Child = child;

Service.Create(parent); // here I need to insert the parent with the referenced foreign key (id = 5)

編集:

データベースから子オブジェクトを取得できません。

4

2 に答える 2

1

NHibernate レベルでは、 によって作成されたプロキシを使用できますISession

ID (例: 5) が存在することが確実な場合は、 を呼び出すことができますsession.Load<Child>(5)。これは for を返しproxyますが、実際にはこれをロードする必要はまったくありません。そのプロキシを親に挿入すると、親に対してのみ INSERT ステートメントが発行されます

Create(Parent parent, int childId)// = 5)
{

  child = session.Load<Child>(5);

  parent.Child = child;

  session.Save(parent);

拡張:

参照を処理する別の方法として、別のマッピングが考えられます。私は通常、Reference とその RefererenceId に次の 2 つのプロパティを使用します。

<property not-null="true" name="ChildId" insert="false" update="false" />
<many-to-one name="Child" column="ChildId" />

あなたの場合、解決策は同様の解決策を使用することですが、更新可能なIDプロパティを使用します

<property not-null="true" name="ChildId" />
<many-to-one name="Child" column="ChildId" insert="false" update="false" />

そして、両方のプロパティを持つ親

class Parent 
{
    public virtual Child Child { get; set; }
    public virtual int ChildId { get; set; }

そして、次のようなコード

parent.ChildId = 5;
于 2013-08-21T15:14:09.870 に答える
0

デフォルトでは (サブ) エンティティ間の関係を気にしないため、ステートレス セッションを使用します。これにより、実際のパフォーマンスが向上します。私の投稿内の例を参照してください。

于 2013-08-21T16:07:35.510 に答える