2

我看到了关于这个主题的其他一些帖子,但我还没有得到正确的答案(我敢肯定是我自己的错)但我想为数据库做种,我已经建立了多对多的关系,但是我不知道如何用第一个实体 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; }
}

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

提前致谢

4

2 回答 2

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)
        }
    }
于 2014-03-11T18:37:56.947 回答
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();
于 2013-05-08T16:04:11.957 回答