更新IQueryable中的行并保存更改



我正在尝试更新从数据库检索到的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或任何对您最有意义的数据类型之前,不会将其存储在内存中。

最新更新