实体框架代码首先AddOrUpdate与复杂的关键有enum
本文关键字:enum 复杂 代码 框架 AddOrUpdate 实体 | 更新日期: 2023-09-27 18:15:47
public class User
{
//... rest of the properties
[Index("IX_Unique",1,IsUnique = true)]
public int DepartmentId {get; set;}
[Index("IX_Unique",2,IsUnique = true)]
public EmployementType EmployementType {get; set;}
}
public enum EmployementType
{
Contract=1,
FullTime,
PartTime,
}
使用EF代码第一种子,当我运行下面的行时,它总是尝试做INSERT,这将从第二次尝试失败,因为第一次尝试已经插入了那些记录
context.Users.AddOrUpdate(p => new { p.DepartmentId, p.EmployementType }, users.ToArray());
AddOrUpdate上的相同类型的复杂键检查适用于其他种子,但这些种子在复杂键
中没有enum类型。我怎么能使这个工作没有替换enum与整数类型
我使用的是EF 6.1.3, c# 4.6
能够识别问题并修复它。(但无法真正理解其中的洞察力问题)
我所做的是(这个是失败的,总是做插入而不是更新)。
var demoDepartment = context.Department.FirstOrDefault(x => x.Name.Equals("HR", StringComparison.OrdinalIgnoreCase))
demoDepartment.Users.Add(new User()
{
DepartmentId = demoDepartment.Id,
Name="John",
// All properties
IsActive = true
});
demoDepartment.Users.Add(new User()
{
DepartmentId = demoDepartment.Id,
Name="Smith",
// All properties
IsActive = true
});
context.Users。AddOrUpdate(p => new {p. departmentd, p. employementtype}, demoDepartment.Users.ToArray());
<<p> 修复/strong>List<User> users = new List<User>();
var demoDepartment = context.Department.FirstOrDefault(x => x.Name.Equals("HR", StringComparison.OrdinalIgnoreCase))
users.Add(new User()
{
DepartmentId = demoDepartment.Id,
Name="John",
// All properties
IsActive = true
});
users.Add(new User()
{
DepartmentId = demoDepartment.Id,
Name="Smith",
// All properties
IsActive = true
});
context.Users.AddOrUpdate(p => new { p.DepartmentId, p.EmployementType }, users.ToArray());
虽然我得到了播种工作,我仍然有兴趣找出为什么Department.Users.ToArray()
不工作,而List<Users>.ToArray()
工作。