2013-05-08 180 views
2

我看到了這個話題的其他一些帖子,但我還沒有得到一個正確的答案(我自己的錯誤,我肯定),但我想種子數據庫和我已經建立了多對多的關係,但我無法弄清楚如何爲第一個實體標識第二個實體。播種許多到很多EF代碼的第一個關係

 var users = new List<User>() 
     { 
      new User() 
      { 
       Id = 1, 
       FirstName = "Clark", 
       LastName = "Kent" 
      }, 
      new User() 
      { 
       Id = 2, 
       FirstName = "Lex", 
       LastName = "Luther" 
      } 
     }; 
     users.ForEach(p => context.Users.Add(p)); 
     var messages = new List<Message>() 
     { 
      new Message() 
      { 
       Id = 1, 
       SenderId = 2, 
       Recipients = new List<User> { Id = 2, Id = 3} // <<< Problem is here 
      } 
     } 
     messages.ForEach(p => context.Messages.Add(p));    
     base.Seed(context); 

我的消息類。

public class Message 
{ 
    public int Id { get; set; } 
    public int SenderId { get; set; } 
    public int RecipientsId { get; set; } 
    public virtual User Sender { get; set; } 
    public virtual ICollection<User> Recipients { get; set; } 
} 

我的用戶類。

public class User 
{ 
    public int Id { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public virtual ICollection<Message> Messages { get; set; } 
} 

要清楚 - 我可以正常播種的用戶沒有問題,如果有任何錯別字或複製粘貼錯誤他們不是什麼大不了的事,因爲我知道一切工作除了能夠創建列表已經播種的收件人。

在此先感謝

+0

您是如何定義用戶和消息之間的映射的? – nakchak 2013-05-08 15:57:10

+0

EF Code First已經處理它,因爲它正在生成數據庫 – 2013-05-08 15:58:10

+0

對於所有密集目的,我無法弄清楚這裏出了什麼問題。我嘗試添加配置並映射多對多關係,但沒有幫助。當我嘗試設置Recipients = new List ()並添加用戶時,它表示ICollection 收件人是'Models.User',列表是列表。 – 2013-05-08 17:19:00

回答

3

這是一個古老的線程,但我只是h給我一個類似的問題,以爲我會提供一個答案。 您需要查詢上面創建的用戶對象

var messages = new List<Message>() 
    { 
     new Message() 
     { 
      Id = 1, 
      SenderId = 2, 
      Recipients = new List<User>() 
      { 
       users.Single(u => u.Id == 1), 
       users.Single(u => u.Id == 2) 
     } 
    } 
0

我注意到的第一件事是,你將int到收件人列表,而不是用戶對象

如果您嘗試這樣的代碼會發生什麼:

var users = new List<User>() 
    { 
     new User() 
     { 
      Id = 1, 
      FirstName = "Clark", 
      LastName = "Kent" 
     }, 
     new User() 
     { 
      Id = 2, 
      FirstName = "Lex", 
      LastName = "Luther" 
     } 
    }; 
    users.ForEach(p => context.Users.Add(p)); 

    var messages = new List<Message>() 
    { 
     new Message() 
     { 
      Id = 1, 
      SenderId = 2, 
      Recipients = new List<User> {users[0],users[1] } // <<< Problem is here 
     } 
    } 

    messages.ForEach(p => context.Messages.Add(p));   

    context.SaveChanges(); 

或你可以嘗試這個事件:

var users = new List<User>() 
    { 
     new User() 
     { 
      Id = 1, 
      FirstName = "Clark", 
      LastName = "Kent" 
     }, 
     new User() 
     { 
      Id = 2, 
      FirstName = "Lex", 
      LastName = "Luther" 
     } 
    }; 
    users.ForEach(p => context.Users.Add(p)); 

    var messages = new List<Message>() 
    { 
     new Message() 
     { 
      Id = 1, 
      SenderId = 2, 
      Recipients = new List<User> {context.Users.Where(u=>u.Id==1),context.Users.Where(u=>u.Id==1) } 
     } 
    } 

    messages.ForEach(p => context.Messages.Add(p));   

    context.SaveChanges(); 
+0

對不起,第一個編譯第二個不讓我試試。沒有第一個失敗。 – 2013-05-08 16:07:28

+0

是的,這兩種方法仍然無法正常工作,也沒有任何變化,我可以拿出 – 2013-05-08 16:47:33