gpt4 book ai didi

c# - EFCore.BulkExtensions - 使用 pimarykey 的 BulkUpdate

转载 作者:行者123 更新时间:2023-12-04 10:04:47 25 4
gpt4 key购买 nike

我们正在尝试批量更新( 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具有 Id 的行为 1 但我收到以下错误
The given key 'Id' was not present in the dictionary.

那么我如何 BulkUpdate(EFCore.BulkExtensions) 基于主键的表。

最佳答案

假设 Id主键(PK)并且您只需要更新 Name基于 Id而不是 Age .

需要设置PropertiesToInclude BulkConfig 内的属性.注意:您不必使用 PropertiesToIncludePropertiesToExclude同时。 (如果您想包含超过一半的属性,最好使用 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);

关于c# - EFCore.BulkExtensions - 使用 pimarykey 的 BulkUpdate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61641818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com