2013-05-08 81 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