2

LLBLGenで「カスケード削除」として最もよく説明されているように見えることを行う簡単な方法はありますか?私が探しているものの例:

あなたはこれらのテーブルを持っています:

Customer:  
-Id

Order:  
-Id  
-CustomerId

OrderDetail:
-Id
-OrderId

ここで、特定の顧客とそれに依存するすべてのもの(すべての注文、およびすべての注文の注文の詳細)を削除したいと思います。IDを外部キーとして持つ注文を削除する前に顧客を削除すると、データベースは適合をスローするため、次のことを行う必要があります。

  1. 顧客を獲得する
  2. 顧客の注文を取得する
  3. 各注文のOrderDetailsを取得します
  4. 各OrderDetailを削除します
  5. 各注文を削除する
  6. 各顧客を削除する

さて、これはかなり一般的なタスクのようです-どこかにある種のDelete(Entity entityToDelete、bool isRecursive)関数があると思います。とにかく、これを行う簡単な方法はありますか?

4

1 に答える 1

4

いいえ、LLBLGenProはカスケード削除をサポートしていません。次の理由により、これを組み込みませんでした。-カスケード削除を実行できるとは限りません(2つ以上のパスがaからbにつながるひし形のモデルを想像してください。これが、たとえばsqlserverが常に/を実行するとは限らない理由でもあります。カスケード削除を許可します-エンティティごとのターゲットの継承では、カスケード削除はできません。

データベースで直接一括削除をサポートしています。したがって、最初に削除するためにすべてのエンティティをフェッチする必要はありません。たとえば、顧客の注文のすべての注文詳細を削除するには、orderdetailsで直接削除を作成します。ここで、フィルターとしてfieldcompareset述語を指定し、注文の顧客IDに基づいて注文のフィルターを指定します。次に、同じ述語を使用して(結合なしで)注文を削除してから、顧客を削除します。これらの削除を作業単位にグループ化して、トランザクションで1回の実行で簡単に実行できます。

これに行き詰まった場合は、フォーラムに質問を投稿してください:http: //www.llblgen.com/tinyforum。喜んでお手伝いします。

于 2010-08-12T17:16:03.323 に答える