Asp.net core mvc 在MVC6中手动加载导航属性
在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的项,并将其
[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:保存上下文
//返回。。。。
}
我的问题是关于显式加载。您的建议将起作用,但在将更改保存到数据库时会出现问题。