我使用实体框架,想知道将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;
答案 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();
}