实体框架 - 插入列创建副本

时间:2017-06-16 04:12:15

标签: c# entity-framework

我正在使用EF 6.1.3。基本上我有两个班级:

public class User
{
    public int Id { get; set; }
}

public class Card
{
    public int Id { get; set; }
    public string Name { get; set; }
    public User CreatedBy { get; set; }
}

当然,检查表定义时,会在CreatedBy CardId User之间创建外键关系。 Card现在有一个CreatedBy_Id列。

我播种了一个默认的User(Id = 1),它存储在我们称之为CurrentUser的变量中。现在,当我想要输入一张卡片时:

context.Cards.Add(new Card
{
    Name = "Card of Water",
    CreatedBy = CurrentUser
});
context.SaveChanges();

我得到的结果是新Card已创建,但CreatedBy未存储CurrentUser引用。而是创建了一个新的User(Id = 2),这就是存储在新Card的{​​{1}}中的内容。

我该如何纠正?感谢。

修改

在起始表单的CreatedBy事件中,

CurrentUser在程序开头设置一个值。它被声明为全局变量:

Load

添加仅用于在Button中进行测试。上面的代码就是它的全部内容。

2 个答案:

答案 0 :(得分:0)

find . -name "myfile.h" -delete

答案 1 :(得分:0)

要解决此问题,您需要在这两个表之间建立外键关系,如下所示:

public class User
{
    [Key]
    public int Id { get; set; }         // primary key
}

public class Card
{
    public int Id { get; set; }
    public string Name { get; set; }

    [ForeignKey("CreatedBy")]
    public int UserId { get; set; } // Foreign Key

    public virtual User CreatedBy { get; set; }
    //use virtual keyword to allow lazy loading while execution
}

context.Cards.Add(new Card
{
    Name = "Card of Water",
    UserId = CurrentUser.Id
    //No need to insert CreatedBy user object here as we are passing UserId
});
context.SaveChanges();