实体框架代码首先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

实体框架代码首先AddOrUpdate与复杂的关键有enum

能够识别问题并修复它。(但无法真正理解其中的洞察力问题)

我所做的是(这个是失败的,总是做插入而不是更新)。

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()工作。