テスターですが何か?

ホビープログラマ略してHPです

Linq to EntitiesでDelete

leave a comment »

Linq to EntitiesでSelect /Insert /Updateをしているサンプルはたくさんありますが、Deleteのサンプルがあまり見つからなかったのでメモ。

実行したいSQLはこんな感じです。分かりやすくするために、前レコードを削除するSQLを考えます。

Delete * from Tags;

Linq to Entitiesにするとこうなります。(エンティティモデルをインスタンス化する記述は省いています)

var Tags = from t in Entity.Tags
                  select t;

foreach (var t in Tags)
{
    Entity.DeleteObject(t);
}
Entity.SaveChanges();

全レコードを取得して、1件1件心を込めてDeleteObjectをするだけです。条件を指定したい場合は、データを取得するクエリにwhere句を付け加えるだけです。SQLに比べると面倒くさいですね。1000件を削除するならもんないないと思いますが、数千万、数億レコードを削除するときにパフォーマンスが出るかどうか不安です。

ちなみに、こう書いても動きそうですが、SaveChangesメソッドで例外が発生します。こう書けるとSQLと同じくらいの使い勝手になるのですが。

var Tags = from t in Entity.Tags
                  select t;

Entity.DeleteObject(Tags);

Entity.SaveChanges();

Written by david9142

2011年2月13日 @ 11:39 PM

カテゴリー: DT31Demo

Tagged with , ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。