我正在尝试更新从数据库检索到的IQueryable中的所有行。
这样做正确吗?当我对此运行Xuit测试时,这些行似乎消失了。
foreach (var item in productCustomer) // productCustomer is IQueryable
{
item.isActiveStatus = (item.ExpirationYear < 2019);
}
_dbContext.SaveChanges();
目前使用EF Core 3.1
注意:尽量避免创建全新的对象或重新映射所有内容;只想更新20个成员中的1个。
您需要首先获取对象,然后才能跟踪它们的更改。然而,如果您使用IQueryable所做的只是在不接触任何其他内容的情况下更新成员,那么只执行update查询会更快。
考虑:
using(var context = new SampleContext())
{
var commandText = "UPDATE Categories SET IsActiveStatus = ExpirationYear < 2019 --WHERE <YOUR CONDITIONS>";
//var name = new SqlParameter("@variable", "value");
context.Database.ExecuteSqlCommand(commandText/*,<params SqlParameter[]>*/);
}
更改
> foreach (var item in productCustomer)
至
foreach (var item in productCustomer.ToList())
IQueryable只不过是表上触发数据库读取的select语句。在将对象拉入List或任何对您最有意义的数据类型之前,不会将其存储在内存中。