实体框架代码首先使用具有枚举的复杂密钥AddOrUpdate

时间:2015-10-03 20:37:50

标签: c# entity-framework enums

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 Code first Seed,当我运行以下行时,总是尝试执行 INSERT ,这将从第二次尝试失败,因为第一次尝试已经插入了那些记录

context.Users.AddOrUpdate(p => new { p.DepartmentId, p.EmployementType }, users.ToArray());

对AddOrUpdate进行相同类型的复杂密钥检查适用于其他种子,但复杂密钥中没有枚举类型

如何在不使用整数类型

替换枚举的情况下完成此工作

我使用的是EF 6.1.3,C#4.6

1 个答案:

答案 0 :(得分:1)

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

我正在做的是(这个失败并且总是在进行插入而不是更新)。

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.DepartmentId,p.EmployementType},demoDepartment.Users.ToArray());

修复

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()有效。如果任何人能够对此有所了解,那将是一个很大的帮助。