我只想根据下面提到的条件更新字段。我知道如何用SQL编写它。我不确定如何在实体框架中完成此操作。
UPDATE Table SET SomeDateTime = @NewDateTime WHERE Id = @MyId AND SomeDateTime > @NewDateTime
由于要使用微服务架构,因此我想使用此特定查询。
答案 0 :(得分:2)
如果Id
是主键,这意味着您只能找到一条记录,那么我更新它的方式就是检索记录,更改要编辑的属性的值,然后保存上下文的变化。
int MyId = ...
DateTime NewDateTime = ...
using (YourDbContext dbContext = new YourDbContext())
{
YourObject obj = dbContext.YourObjects.SingleOrDefault(item => item.Id == MyId && item.SomeDateTime > NewDateTime)
if (obj != null)
{
obj.SomeDateTime = NewDateTime;
dbContext.SaveChanges();
}
}
答案 1 :(得分:0)
我会这样:
try
{
var usersToUpdate = await dbContext.MyList.Where(x=>x.Id==myId).ToListAsync();
usersToUpdate.ForEach(x=>{..make updates..});
await dbContext.SaveChangesAsync();
}
catch (Exception e)
{
..Error handling..
}
P.S,如果您想查看更新了多少条记录,可以将变量分配给saveChangesAsync:
var result= await dbContext.SaveChangesAsync();
答案 2 :(得分:0)
您可以使用以下示例代码来查找数据库的特定记录,然后借助EF Core对其进行更新:
public bool UpdateTable()
{
DatabaseContext _db = new DatabaseContext(); //database context instance
int MyId = 100; //sample Id
DateTime MyDateTime = new DateTime(2019, 5, 24, 12, 30, 52); //sample DateTime
var p = _db.Table.Where(x => x.Id == MyId && x.SomeDateTime >
MyDateTime ).FirstOrDefault(); //the targeted record of the database
if (p != null)
{
p.SomeDateTime = DateTime.Now;
_db.SaveChanges();
return true;
}
return false;
}
答案 3 :(得分:0)
如果您想直接使用sql,可以使用ExecuteSqlCommand
如果要处理一个对象然后进行更新,我将更改一个对象并调用SaveChanges
,但事实并非如此。.这是直接对该表的更新,如果该表有数百万行您想要执行sql
以获得性能。
示例
using(var context = new SampleContext())
{
var commandText = "UPDATE Table SET SomeDateTime = @NewDateTime WHERE Id = @MyId AND SomeDateTime > @NewDateTime";
var newDateTime = new SqlParameter("@NewDateTime", myDateValue);
var myId = new SqlParameter("@MyId", myIdValue);
context.Database.ExecuteSqlCommand(commandText, new[]{newDateTime,myId});
}