バルク挿入更新のストアドプロシージャにテーブルを渡そうとしています。私はテーブルのデータベースにカスタムタイプを作成し、テーブルパラメータ(カスタムタイプ)を持つプロシージャも作成しました。ストアドプロシージャでテーブルを渡す最も良い方法は
ただし、Entity Frameworkでモデルを更新すると、テーブルパラメータを渡すための正しいコードが生成されません。続き
は私のストアドプロシージャの宣言です:
public virtual int TimeClock_UpdateTimeClockData(Nullable<System.DateTime> dateTimeFrom, Nullable<System.DateTime> dateTimeTo)
{
var dateTimeFromParameter = dateTimeFrom.HasValue ?
new SqlParameter("dateTimeFrom", dateTimeFrom) :
new SqlParameter("dateTimeFrom", typeof(System.DateTime));
var dateTimeToParameter = dateTimeTo.HasValue ?
new SqlParameter("dateTimeTo", dateTimeTo) :
new SqlParameter("dateTimeTo", typeof(System.DateTime));
return ((IObjectContextAdapter)this).ObjectContext.ExecuteStoreQuery("TimeClock_UpdateTimeClockData @dateTimeFrom,@dateTimeTo", dateTimeFromParameter, dateTimeToParameter);
}
それは単にテーブル値パラメータを無視している:
CREATE PROCEDURE [dbo].[TimeClock_UpdateTimeClockData]
@dateTimeFrom date,
@dateTimeTo date,
@employeeEarnings EmployeeEarningsTable readonly
AS
BEGIN
--- insert/update operations
END
これは、Entity Frameworkで生成されたコードです。
プロシージャにテーブルを渡すためのEntity Frameworkの回避策はありますか?
複数のレコードをストアドプロシージャに渡す代替方法はありますか?私はXmlパラメータについて知っていますが、大きなデータセットを渡したいのでパフォーマンスの問題を招きたくないので、これを避けたかったのです。
'ExecuteStoreQuery'ではなく' ExecuteSqlCommand'または 'SqlQuery'を使用してみてください。 –