Asp.net core mvc 在MVC6中手动加载导航属性

Asp.net core mvc 在MVC6中手动加载导航属性,asp.net-core-mvc,entity-framework-core,Asp.net Core Mvc,Entity Framework Core,在MVC6中手动加载导航属性的最佳方法是什么 [HttpPost] [ValidateAntiForgeryToken] 公共异步任务编辑(保留保留,bool ignoreConflicts=false) { int id=reservation.ItemID;//正确的项目id Item=reservation.Item;//空 } 在本例中,当用户提交表单时,我得到一个保留对象,其所有导航属性都设置为null 我能想到的最好的方法是手动查找Item DbSet,找到具有匹配ID的项,并将其

在MVC6中手动加载导航属性的最佳方法是什么

[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务编辑(保留保留,bool ignoreConflicts=false)
{
int id=reservation.ItemID;//正确的项目id
Item=reservation.Item;//空
}
在本例中,当用户提交表单时,我得到一个保留对象,其所有导航属性都设置为null


我能想到的最好的方法是手动查找Item DbSet,找到具有匹配ID的项,并将其分配给navigation属性

这是实体框架7问题,而不是MVC6问题。 EF7还没有实现延迟加载,可能根本不会

你可以在这里追踪车票

这意味着我们需要按照你的建议去做;比如:


Item-Item=context.Items.FirstOrDefault(x=>x.ID==reservation.ItemID)

好吧,首先。。。您正在进行MVC操作。你将从客户那里得到什么。而不是直接访问数据库

因此,
reservation.Item
可能不是null,但也可能不是真实数据

在此场景中,您首先必须从服务器检索数据,然后执行以下两项操作之一:

  • 根据从客户端收到的信息,直接手动更新EF7实体
  • 使用
    tryupdatemodelsync
    自动更新当前实体
  • 它可以简单到:

    公共操作结果更新(预订)
    {
    var item=context.Items.FirstOrDefault(x=>x.ID==reservation.ItemID);
    等待TryUpdateModelAsync(项目);
    //todo:保存上下文
    //返回。。。。
    }
    
    我的问题是关于显式加载。您的建议将起作用,但在将更改保存到数据库时会出现问题。