2

一括削除を容易にするためにExecuteStoreCommandを使用しています。

この作品

// ExecuteStoreCommand syntax via http://stackoverflow.com/a/13024320/740639
// Delete all of today's events
DateTime eventDate = DateTime.Now;

string sql = "DELETE FROM EventCalendar WHERE EventDate = {0}";
context.ObjectContext.ExecuteStoreCommand(sql, new object[] { eventDate });

これをやりたいのですが、うまくいきません

ArgumentException が発生しました:「オブジェクト タイプ System.DateTime[] から既知のマネージ プロバイダー ネイティブ タイプへのマッピングは存在しません。」

// Delete all of the events for the past 3 days
DateTime[] eventDates = new DateTime[] {
   DateTime.Now.AddDay(-1),
   DateTime.Now.AddDay(-2),
   DateTime.Now.AddDay(-3)
};

string sql = "DELETE FROM EventCalendar WHERE EventDate IN ({0})";
context.ObjectContext.ExecuteStoreCommand(sql, new object[] { eventDates });

提案された解決策

DateTime[] を文字列 "'2013-06-24', '2013-06-23', '2013-06-22'" に変換し、それをパラメーターとして渡すことができましたが、それはハックのようです。

EF に一括削除のサポートを追加するライブラリがあることは知っていますが、現時点ではそのルートには行きたくありません。

助言がありますか?

4

2 に答える 2

1

.net 側で日付を区切り文字と組み合わせてパラメーターとして渡し、テーブル値関数を使用してサーバー側で区切り文字列を分割することができます。

「2013-06-24|2013-06-23|2013-06-22」のようなものを渡します

http://ole.michelsen.dk/blog/split-string-to-table-using-transact-sql/

于 2013-06-25T16:17:07.893 に答える