2009-03-11 18 views
0

をNOTFOUND:流暢NHibernateはHasManyToManyと私は、次のFNHマッピングフラグメントを持つ

次HBMを生産
HasManyToMany((c) => c.Plaintiffs) 
    .LazyLoad() 
    .WithTableName("invoicePlantiff") 
    .WithChildKeyColumn("PersonReferenceID") 
    .WithParentKeyColumn("invoiceID") 
    .FetchType.Join(); 

<bag name="Plaintiffs" access="iServe.Design.CslaNHibernate.CslaChildPropertyAccessor, iServe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" lazy="true" table="invoicePlantiff"> 
    <key column="invoiceID" /> 
    <many-to-many column="PersonReferenceID" class="iServe.PersonReference, iServe, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" fetch="join" /> 
</bag> 

問題は、私がある、聞かせてレガシーデータを扱っていますということです私たちはちょうど「理想よりも低い」と言っています。レコードの中には無効なIDがあるものがありますので、バッグ内のmany-to-manyタグにnot-found="ignore"属性を入れる必要があります。私はFNHでこれを達成する方法は見当たりません。

References()コールには.NotFound.Ignore()がありますが、HasManyToManyコールにはありません。

誰かが私に行方不明を教えてもらえますか? NHを設定する前に属性をレンダリングした後に属性を挿入するためのハックであっても、それを動作させるだけです。

ありがとうございます。

UPDATE gcoresの回答はうまくいかず、間違ったタグに追加されます。詳細については私のコメントをご覧ください。

答えて

8

私はHasManyHasManyToManyコールにNotFoundを追加する変更を行ったばかりです。それが役に立てば幸い!

0

これについてはわかりませんが、SetAttributeはありませんか?

HasManyToMany((c) => c.Plaintiffs) 
.LazyLoad() 
.WithTableName("invoicePlantiff") 
.WithChildKeyColumn("PersonReferenceID") 
.WithParentKeyColumn("invoiceID") 
.FetchType.Join() 
.SetAttributte("not-found", "ignore"); 

UPDATE:そのことについて

申し訳ありませんが、私はSetAttributeのがあった知っていたが、私はそれはあなたが望んでいたことを確認できませんでした。

もう一つの選択肢は、Fluent NHとXMLマッピング、Fluent NH wiki explains how to do thisを混ぜ合わせることです。これはanswer from stackoverflowです。

+0

実際には、 'bag'に属性を追加して無効にしたために動作しているgcoresです。それはバッグの中の「多対多」に行く必要があります。 –

関連する問題