私はDapperの使用をまだ開始していませんが、バルクの挿入/更新について研究していた今日、それはすぐに遭遇しました。現在私はEF6を使用していますが、私は大量のものの将来Dapperを使用してみたいと思います。このアプリのために〜15kのレコードがあるかもしれませんが、私は〜100kレコードになる可能性のある他のアプリを持っています。大まかな挿入または更新ですか?
私は次のEFコードをDapperに変換する方法を研究しようとしています。それはファイルからレコードを読み込み、その従業員がDBに存在するかどうかを調べ、そうであればファイルの値でプロパティを更新し、そうでない場合はファイルからの値で新しいオブジェクトを作成します。
私が探しているときに例が見つかりませんでした。私が見つけることができるのは、単純な挿入や更新を行う方法でした。私は実際に一括挿入/更新の良い例は見つけられませんでした。 Dapperをどうやって使うのか分かりません。
Dapperでどうすればいいですか?
int count = 1;
using (ctx = new DataContext())
{
ctx.Configuration.AutoDetectChangesEnabled = false;
ctx.Configuration.ValidateOnSaveEnabled = false;
while ((record = srFile.ReadLine()) != null)
{
int employeeId = int.Parse(record.Substring(2, 8));
bio_employee employee = ctx.bio_employee.FirstOrDefault(e => e.emp_id == employeeId);
if (employee != null)
{
SetEmployeeData(employee, record);
ctx.Entry(employee).State = System.Data.Entity.EntityState.Modified;
}
else
{
employee = new bio_employee();
employee.emp_id = employeeId;
SetEmployeeData(employee, record);
ctx.bio_employee.Add(employee);
}
if (count % batchSize == 0)
{
ctx.SaveChanges();
ctx.Dispose();
ctx = new DataContext();
}
count++;
}
ctx.SaveChanges(); //save any remaining
}
私はここに2つの異なることがあると思います:a)TSQLでupsertを行う方法。 b)TSQLをdapperから呼び出す方法。後者は非常に簡単です - トリッキーなビットは前者ですが、それは大胆な懸念ではなく、TSQLです。グーグル "upsert SQL Server"を試してください –