播种多对多的EF Code First关系

时间:2013-05-08 15:35:06

标签: c# .net entity-framework ef-code-first

我在这个主题上还有一些其他帖子,但我还没有得到正确的答案(我自己的错,我确定)但是我想建立一个数据库,我已经设置了多个到多个关系,但我无法弄清楚如何使用第一个实体id为第二个实体播种。

        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; }
}

要明确 - 我可以正确地为用户播种没有问题,如果有任何拼写错误或复制粘贴错误他们不是什么大问题,因为我知道一切正常,除了能够创建已经收件人的列表被播种了。

提前致谢

2 个答案:

答案 0 :(得分:3)

这是一个老线程,但我刚遇到类似的问题,所以我认为我会提供一个答案。 您需要查询上面创建的用户对象

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)
        }
    }

答案 1 :(得分:0)

我注意到的第一件事是你要将Ints添加到收件人列表,而不是用户对象

如果您尝试这样的代码会发生什么:

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();