我该如何翻译这个:
INSERT INTO test (id, amount) VALUES(1, 5)
ON DUPLICATE KEY
UPDATE amount=amount + VALUES(amount)
使用 mysql 查询进入实体框架?
我该如何翻译这个:
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();