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