c# - C# - 如何使用Entity Framework .NET内核编写带有where子句的SQL更新查询

82 0

我知道如何用SQL写它,我不确定如何在entity framework中实现这一目标。


UPDATE Table SET SomeDateTime = @NewDateTime WHERE Id = @MyId AND SomeDateTime > @NewDateTime



时间: 原作者:

113 4

如果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();


 }


}



原作者:
113 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();



原作者:
107 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;


}



原作者:
131 3

如果你想直接使用sql可以使用ExecuteSqlCommand

例子


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


}



原作者:
...