我们正在尝试基于主键BulkUpdate(EFCore.BulkExtensions)一个表。我们只需要基于Name
而不是Id
Age
模型
public class Student
{
public int Id { get; set; } // Primary Key
public string Name { get; set; }
public int Age { get; set; }
}
这是我用来尝试使用主键ID更新学生姓名的代码
List<Student> students = new List<Student>();
students.Add(new Student()
{
Id = 1,
Name = "Name 1",
Age = 25
});
var updateByProperties = new List<string> { nameof(Student.Id) };
var propToExclude = new List<string> { nameof(Student.Id) };
var bulkConfig = new BulkConfig { UpdateByProperties = updateByProperties, PropertiesToExclude = propToExclude };
_dbContext().BulkUpdate(students, bulkConfig);
我的期望是它将更新Name
为1的行的列Id
,但出现以下错误
The given key 'Id' was not present in the dictionary.
那么我如何基于主键BulkUpdate(EFCore.BulkExtensions)一个表。
答案 0 :(得分:1)
让我们假设Id
是主键(PK),您只需要基于Name
而不是Id
更新Age
需要在PropertiesToInclude
中设置BulkConfig
属性。注意:您不必同时使用PropertiesToInclude
和PropertiesToExclude
。 (如果要包含一半以上的属性,最好使用PropertiesToExclude
,但是在您的情况下,您只想更改Name,因此我们将使用Include属性。)
此外,不需要定义UpdateByProperties
,因为您想通过Id
(即PK)更新数据。 UpdateByProperties
定义用作更新查询的属性。
所以代码应该像这样:
List<Student> students = new List<Student>();
students.Add(new Student()
{
Id = 1,
Name = "Name 1",
Age = 25
});
var propToInclude = new List<string> { nameof(Student.Name) };
var bulkConfig = new BulkConfig { PropertiesToInclude = propToInclude };
_dbContext().BulkUpdate(students, bulkConfig);