繁体   English   中英

Entity Framework Core:填充关系导航属性

[英]Entity Framework Core : populating relationship navigation property

是否有可能在 .NET 6 中使用 Entity Framework Core 6 通过设置外键值填充关系导航属性然后调用SaveChanges

我试过了,但似乎不起作用。 尽管另一种方法非常有效(如果我将导航属性设置为相关实体)。

截图:

设置外键

保存更改后,“部门”属性仍然是 null

尝试此操作时,调用SaveChangesstudent.department仍为 null

var student = db.Students.Find(9);
student.departmentId = 1;
db.SaveChanges();

如果我这样做,外键student.departmentId在调用SaveChanges后会被填充:

var student = db.Students.Find(9);
student.department = db.Departments.Find(1);

db.SaveChanges();

尝试此 student.department 时保存更改后仍为 null

设置外键值不加载相关部门。 直接设置外键的用例通常是为了避免实际加载相关实体。

如果你想加载相关的实体,你还不如查询它并将它分配给导航属性。

在实体上设置外键属性后,如果要使用显式加载,可以加载相关实体。 例如

db.Entry(student).Reference(b => b.Department).Load();

SaveChanges不会自动加载关系数据,除非上下文已经在跟踪相应的实体( EF Core 中的更改跟踪)。 除了使用其中一种选项来加载相关数据(例如@David Browne在其回答中建议的选项)之外,还可以使用以下方法:

db.Departments.Find(1);
var student = db.Students.Find(9);
student.departmentId = 1;
db.SaveChanges(); // student.department will be filled here

甚至

var student = db.Students.Find(9);
student.departmentId = 1;
db.SaveChanges();
db.Departments.Find(1); // student.department will be filled here

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM