2

私は3つのテーブルを持っています - 1.異常 2.マークアップ 3.Anomaly_Markup

マッピング -

    public AnomalyMap()
    {
        Table("anomaly");

        Id(x => x.Id).Column("ID").CustomType("decimal");

        HasManyToMany<DMMarkupData>(x => x.DMMarkupData)
            .Table("anomaly_markup")
            .ParentKeyColumn("ANOMALY_ID")
            .ChildKeyColumn("MARK_UP_ID")
            .Cascade.All()
            .LazyLoad();
    }

    public MarkupDataMap()
    {
        Table("markup");
        Id(x => x.Id).Column("ID");
    }

調子 :

  1. Anomaly ごとにデータを保存 - Anomaly には MarkupData が含まれます。データを保存します。それは私と一緒に機能しています。
  2. マークアップを削除 - マップ テーブルとマークアップ データから関係を削除します。私はこの問題に直面しています。

マークアップデータを削除する方法、解決策を見つけるのを手伝ってくれる人はいますか?

4

3 に答える 3

0

あなたが投稿したものから、DMMarkupData-> Anomalyで関係を定義していないように見えるので、NHibernateはanomaly_markupテーブルからMarkupDataエントリを削除することを知りません(逆の関係が存在するにもかかわらず)。MarkupDataを削除するときにanomaly_markupのエントリを削除するデータベースレベルのカスケードで解決するか、コードとNHibernateで関係をマッピングすると、NHibernateがカスケードを実行します。

于 2012-10-01T15:08:13.207 に答える
0

MarkUpData と Anomaly との関係は見当たりません。同じ関係が存在する必要があり、マッピングで Inverse 属性を使用してカスケード操作の制御を指定する必要があります。参照できます: Fluent NHibernate で「cascade delete」オプションを「Set Null」に設定する方法は?

DMMarkupData を削除するには、オブジェクトをコレクションから削除し、Save Anomaly を呼び出します。

于 2012-11-23T09:22:20.787 に答える
0

NHibernate はオブジェクト グラフを管理せず、永続化するだけです。アイテムが削除されたときにリストからアイテムを削除するのは、ビジネス ロジックの責任です。

(トリガーとそれを回避するためのすべてのトリックは、変更を行うトランザクション内で矛盾と副作用につながります。永続性を無視するという観点からは、推奨されません。パフォーマンスの問題に直面した場合にのみ実行します。別の方法で解決します。)

componentsを使用して単純化できます。ただし、

  • 他の場所から同じマークアップを参照していない
  • 異常に関係のないマークアップを照会する必要はありません
  • マークアップがアノマリティの外に存在することはありません

以上のことから、コンポーネントの操作ははるかに簡単です。(流れるように呼ばれる方法はわかりませんが、xml マッピングでは「複合要素」と呼ばれます)。

コンポーネントを使用する場合、データベースからマークアップを削除する必要はありません。それが存在するリストから削除するだけです。

于 2012-11-23T09:36:41.410 に答える