これをどのように翻訳できますか:
INSERT INTO test (id, amount) VALUES(1, 5)
ON DUPLICATE KEY
UPDATE amount=amount + VALUES(amount)
mysqlクエリでEntity Frameworkに?
これをどのように翻訳できますか:
INSERT INTO test (id, amount) VALUES(1, 5)
ON DUPLICATE KEY
UPDATE amount=amount + VALUES(amount)
mysqlクエリでEntity Frameworkに?
ロジックを抽出します。マニュアルで説明されているように:
ON DUPLICATE KEY UPDATE を指定し、UNIQUE インデックスまたは PRIMARY KEY で値が重複する行が挿入された場合、古い行の UPDATE が実行されます。たとえば、列 a が UNIQUE として宣言され、値 1 が含まれている場合、次の 2 つのステートメントは同じ効果があります。
INSERT INTO table (a,b,c) VALUES (1,2,3) ON DUPLICATE KEY UPDATE c=c+1; // And UPDATE table SET c=c+1 WHERE a=1;
あなたのクエリは次のように言っています: ID 1 と金額 5 の行を挿入しますが、それが存在する場合は、ID 1 の行の金額を 5 増やします。
MS-SQL は、私の知る限り、そのようなステートメントをサポートしていないため、自分で作業を行う必要があります。
public void InsertOrUpdateTest(Test input)
{
var entity = _dbContext.Test.FirstOrDefault(t => t.ID == input.ID);
// If that record doesn't exist, create it and add it to the DbSet<Test> Tests
if (entity== null)
{
entity= new Test(id = input.ID);
_dbContext.Tests.Add(entity);
}
// Increase the amount. For a new entity this will be equal to the amount,
// whereas an already existing entitiy gets its current value updated.
entity.Amount += input.Amount;
_dbContext.SaveChanges();
}