增加或更新实体框架的金额

本文关键字:金额 框架 实体 更新 增加 | 更新日期: 2023-09-27 18:27:01

如何翻译这个:

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

使用mysql查询进入实体框架?

增加或更新实体框架的金额

提取逻辑。如手册中所述:

如果指定ON DUPLICATE KEY UPDATE,并且插入的行会导致UNIQUE索引或PRIMARY KEY中的值重复,则会执行旧行的UPDATE。例如,如果列a声明为UNIQUE并包含值1,则以下两个语句具有相同的效果:

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();
}

你可以试试这样的东西:

var id = 1;
var amount = 5;
var existing = db.Test.SingleOrDefault(x => x.Id == id);
if (existing != null)
{
    existing.Amount = existing.Amount + amount;
}
else 
{
    db.Test.Add(new Test{Id=id,Amount=amount});
}
db.SaveChanges();