4

プロジェクト内に、次の列を持つデータベーステーブルがあります

ここに画像の説明を入力

このテーブルから、渡すことができる一致する SharingAgencyId と ReceivingAgencyId の値を持つすべての行を削除できるようにしたいと考えています。

私がこれまでに試したこと:

 public static ICollection<SecurityDataShare> UpdateSharedEntites(long conAgency, long recAgency)
        {
            ICollection<SecurityDataShare> agShares = null;
            try
            {
                using (var context = new ProjSecurityEntities(string.Empty))
                {
                    agShares = (from a in context.SecurityDataShares
                               .Where(c => c.ReceivingAgencyId == recAgency && c.SharingAgencyId == conAgency)
                                select a); 
                }
            }
            catch (Exception ex)
            {
                //ToDo
                throw;
            }
        }

私の考えたプロセスは、id が渡されたパラメーターと一致するレコードを取得し、foreach ループを使用して (agShare) を反復処理し、各行を削除してから変更を保存することでした。現在の実装では、どの Delete メソッドにもアクセスできないようです。

上記の例を見て、dbContext を使用して 43 と 39 の値を含むテーブル内の行を削除する方法についての提案をいただければ幸いです。

乾杯

4

3 に答える 3

6

私が正しく理解している場合、あなたDbContextのプロパティは、のようSecurityDataSharesに入力する必要がありますIDbSet<SecurityDataShare>それが正しければ、このRemoveメソッドを使用できるはずです。

foreach(var agShare in agShares) {
    context.SecurityDataShares.Remove(agShare);
}
context.SaveChanges();

これにより、これらのオブジェクトを削除するための別の SQL ステートメントが作成されることに注意してください。オブジェクトの数がかなり多くなると予想される場合は、代わりにストアド プロシージャを使用することをお勧めします。

于 2012-04-18T16:56:00.193 に答える
2

Entity Framework では、単一のコマンドを実行して複数の行を削除するのは簡単ではありません (私が知っていることです)。私の好みは、ネイティブ sql と sorts の dbcontext を使用して、マルチエンティティの更新/削除のために SQL ステートメントを直接実行することです。

于 2012-04-18T17:05:43.700 に答える
0

また、datatable をストアド プロシージャに渡し、データベースにタイプの動的タイプ テーブルを含め、そのテーブルをストアド プロシージャに使用して、データベース テーブルから一致する行を削除することもできます。

于 2014-08-04T12:19:18.963 に答える