EF 中的自定义模型活页夹不加载异步中的子实体

Custom model binder in EF do not load child entities in Async

我正在使用 Entity Framework 6.1.1,当我在异步调用中使用自定义模型联编程序时,它会抛出异常,因为子实体 (Brand) 未加载且是强制性的。我正在使用 ninject,我已更新到最新版本 ( 3.2.2.0) 这是代码:

public class PlayerModelBinder : DefaultModelBinder
    {
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var context = DependencyResolver.Current.GetService<DbContext>();
            var id = ModelBinderHelpers.GetA<Guid>(bindingContext, "id");

            if (id == null || !id.HasValue)
                throw new HttpException(404, "Not found");

            var entity = context.Set<Player>().Find(id);

            if (entity == null)
                throw new HttpException(404, "Not found");

            return entity;
        }
    }

这会起作用:

public ActionResult Deactivate(Player player)
        {
            try
            {
                player.Deactivate();
                DbContext.SaveChanges();
            }
            catch (Exception ex)
            {
                var b = ex;
            }
            FlashBag.AddMessage(
                FlashType.Success,
                Strings.Player_DeactivatedSuccessfully);

            return RedirectToAction("Index");
        }

但这不起作用:

public async Task<ActionResult> Deactivate(Player player)
        {
            try
            {
                player.Deactivate();
                await DbContext.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                var b = ex;
            }
            FlashBag.AddMessage(
                FlashType.Success,
                Strings.Player_DeactivatedSuccessfully);

            return RedirectToAction("Index");
        }

感谢您的帮助!

看完this post

我最终这样做了:

public class PlayerModelBinder : DefaultModelBinder
    {
        public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
        {
            var context = DependencyResolver.Current.GetService<DbContext>();
            var id = ModelBinderHelpers.GetA<Guid>(bindingContext, "id");

            if (id == null || !id.HasValue)
                throw new HttpException(404, "Not found");

            var entity = context.Set<Player>()
                .Include(x => x.Brand)
                .FirstOrDefault(x => x.Id == id);

            if (entity == null)
                throw new HttpException(404, "Not found");

            return entity;
        }
    }