2015-10-03 56 views
1
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,將從第二次嘗試失敗,因爲第一次嘗試已插入這些記錄實體框架代碼優先AddOrUpdate具有複雜的組合鍵枚舉

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

同種上AddOrUpdate複雜重點檢查工程,爲其他種子,但那些沒有枚舉類型複雜的關鍵

如何我可以帶出與整型

我使用EF 6.1.3,C#4.6

回答

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

Fix爲

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()。如果有人能夠通過這一點,這將是一個很大的幫助。

相關問題