2012-03-02 9 views
0

私はNHibernateの新機能ですので、ここで誰かがこれを説明することができます。私は3つのテーブル/エンティティ持っている:それは音として流暢なNHibernateは検索レコードを変更できませんか?

  • アプリケーション
  • 役割
  • ApplicationRoles

を、ApplicationRolesは、アプリケーションおよび役割への外部キーを持つルックアップテーブルであり、いくつかの他のフィールドIsActiveのように。

コード内で、ApplicationRoleには、親、Application、およびRoleの両方への参照があります。 ApplicationオブジェクトにはListがあるので、子のApplicationRoleオブジェクトを参照できます。役割はありませんが、私はそれを追加しようとしましたが、違いはありません。

私が抱えている問題は、ApplicationRoleオブジェクトを直接ロードして操作して再度保存するように見えないということです。オブジェクトを自分自身のPK、または両方のFKでロードすることができますが、IsActiveフィールドを変更することはできますが、データベースに保存すると、Applicationオブジェクトで 'flush with flush'というエラーが発生し、他の子コレクションです。

デバッガを使用してオブジェクトのアプリケーションの親参照を調べても、保存が正常に行われても、これは遅延読み込みが原因である可能性があります。しかし、私は私が上記のエラーを取得しない場合。

Applicationオブジェクトをロードし、そのApplicationRoleオブジェクトを操作してアプリケーション自体を保存すると機能しますが、それを行う必要はありません。

EDIT:あなたがクラスを捨てることができ

答えて

1

ApplicationRoleはcompletly

Application 
{ 
    public IList<Role> Roles { get; private set; } 
} 

// in ApplicationMap 
HasManyToMany(a => a.Roles) 
    .Table("ApplicationRole") 
    .ParentKeyColumn("application_id") 
    .ChildKeyColumn("role_id") 
    .Cascade.AllDeleteorphan(); 
+0

これは良いですが、残念ながら私はリンクレコードの1つのまたは2ビットのフィールドを持っているので、それは純粋ではないデータの関係を明らかにルックアップテーブル。フィールドIsDefaultとその他のフィールドがあります。 – LoveMeSomeCode

+0

ああ、これは質問に含めるべき重要な情報です。私は時間があるときに私は再び答えてみるよ – Firo

関連する問題