1

これをどのように翻訳できますか:

INSERT INTO test (id, amount) VALUES(1, 5) 
ON DUPLICATE KEY 
UPDATE amount=amount + VALUES(amount)  

mysqlクエリでEntity Frameworkに?

4

2 に答える 2

2

ロジックを抽出します。マニュアルで説明されているように:

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();
}
于 2013-08-09T22:41:12.270 に答える