在MVC 6中手动加载导航属性的最佳方法是什么?
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Edit(Reservation reservation, bool ignoreConflicts = false)
{
int id = reservation.ItemID; // correct item ID
Item item = reservation.Item; // null
}
在此示例中,当用户提交表单时,我得到一个Reservation对象,其所有导航属性都设置为null。
我能想到的最好的方法是手动查找Item DbSet以找到具有匹配ID的项目并将其分配给导航属性。
答案 0 :(得分:1)
这是一个Entity Framework 7问题,而不是MVC6问题。 懒惰加载尚未针对EF7实施,可能根本不会实现。
您可以在https://github.com/aspnet/EntityFramework/issues/3797
跟踪故障单这意味着我们需要按照你的建议去做;类似的东西:
Item item = context.Items.FirstOrDefault(x => x.ID == reservation.ItemID);
答案 1 :(得分:1)
嗯,首先要做的是......你正处于MVC行动中。您将收到的将来自客户。不是直接数据库。
所以SELECT DISTINCT
locations."id",
locations."name",
contacts.name
FROM locations
JOIN contacts ON locations."id" = contacts.location_id
可能不是null,但也可能不是真正的数据。
在这种情况下,您首先必须从服务器检索数据,然后执行以下两项操作之一:
reservation.Item
自动更新当前实体。可能很简单:
TryUpdateModelAsync