在Entity Framework中添加外键的正确方法

时间:2016-09-28 08:17:23

标签: c# entity-framework

我使用实体框架,想知道将FK设置为​​现有记录的正确方法。

表:Department<(1)----(n)>User

以下是我的尝试:

//here i want to add a new user to a existing department
using (EDModell.myEntities ctx = new EDModell.myEntities())
{
    User uNew = new User();
    uNew.FirstName = "Foo";

    //1. try
    uNew.DepartmentReference.EntityKey = new System.Data.EntityKey("myEntities.Department", "DepartmentID", 4);
    //2. try
    uNew.Department = ctx.Department.Single(x => x.DepartmentID == 4);

    // add more data and save changes
}
根据错别字,尝试似乎有点不安全。它编译时没有显示错误。

第二个需要一个不需要的数据库选择。在SQL中,可以插入id - 所以为什么不在实体框架中呢?

为什么我不能设置

uNew.DepartmentID = 4;

2 个答案:

答案 0 :(得分:0)

最好使用外键ID(第二路)进行设置,以避免再次将外键实体添加到数据库中的任何问题

答案 1 :(得分:0)

假设您的所有导航属性设置正确,您的Department DbSet应该有一个Users集合。所以设置FK关系看起来像这样:

using (EDModell.myEntities ctx = new EDModell.myEntities())
{
    User uNew = new User();
    uNew.FirstName = "Foo";

    //get your department, either by FindById, Find, Where, Single, First ...
    var department = ctx.Departments.Single(x => x.Id == 4);
    department.Users.Add(uNew);
    ctx.SaveChanges();
}