为什么我的数据库上下文被处置

亚历克斯

与我最近的大多数帖子一样,我将首先说这对我来说是全新的,并且我处于理解的边缘。我正在使用现有的应用程序,并且遇到了以上错误。

该应用程序是一个具有3层的MVC应用程序,并且正在通过Swagger运行:

Rest

Services

DAL

在服务层中DependencyConfig,我在RegisterMethod中执行以下操作,并注册了上下文:

container.RegisterWebApiRequest<DbContext>(() => new LocalContext("name=DefaultConnection"));

到目前为止,由于该应用程序的某些部分正在从数据库读取和写入,因此这一切似乎都工作正常-尽管此应用程序中有很多内容,但我并不了解所有内容。

接下来,在Rest层上,我有以下内容:

public class AccountController : ApiController
{
    private readonly WindowsAuthenticationProvider _windowsAuthentication;
    private readonly AuthorizationManager _authorizationManager;
    private readonly IApplicationUserService _userService;
    private readonly IProfileService _profileService;
    private readonly IAccountLogsService _accountLogsService;

    /// <summary>
    /// Constructor
    /// </summary>
    /// <param name="authorizationManager">Authorization Manager</param>
    /// <param name="windowsAuthentication">Enables windows reauthentication without a session</param>
    public AccountController(AuthorizationManager authorizationManager, WindowsAuthenticationProvider windowsAuthentication,
        IApplicationUserService userService, IProfileService profileService, IAccountLogsService accountLogsService)
    {
        _windowsAuthentication = windowsAuthentication;
        _authorizationManager = authorizationManager;
        _userService = userService;
        _profileService = profileService;
        _accountLogsService = accountLogsService;
    }

    /// <summary>
    /// Get logged in user details
    /// </summary>
    /// <remarks>Retrieves details of the currently logged in user</remarks>
    [Authorize]
    [HttpGet]
    [Route("")]
    [ResponseType(typeof(AccountDetailsModel))]
    public IHttpActionResult Details()
    {
        var userId = User.Identity.GetUserId<int>();

        var model = //...

        if (model.HasAccount)
        {
            var user = _authorizationManager.FindUser(User.Identity);
        }

        return Ok(model);
    }
 }

以及从服务层:

public class AuthorizationManager
    {
        private readonly IApplicationUserService _userService;

        public ApplicationUser FindUser(IIdentity identity)
        {
            var userId = identity.GetUserId<int>();
            if (userId != 0)
            {
                return _userService.FindById(userId);
            }

            //...
        }
    }

最后在服务层:

public class ApplicationUserService : UnitOfWork<LocalContext>, IApplicationUserService
    {
        private readonly UserManager<ApplicationUser, int> _userManager;
        private readonly RoleManager<ApplicationRole, int> _roleManager;

        /// <summary>
        /// Finds a user by id
        /// </summary>
        /// <param name="id">User id</param>
        /// <returns>ApplicationUser</returns>
        public ApplicationUser FindById(int id)
        {
            return _userManager.FindById(id);
        }
}

ApplicationUserDAL层上的模型在哪里

希望到目前为止,一切都有意义!

问题是,当代码到达此行时:

return _userManager.FindById(id);

它抛出一个 InvalidOperationException: The operation cannot be completed because the DbContext has been disposed.

在我看来,这似乎已经失去了上下文,例如数据库连接。

似乎已经从register方法中处理了DbContext-但是我不知道为什么?

如果我手动创建这样的上下文:

Context.Users.Find(id);

我能够检索所需的条目,但是问题再次出现在线下-而且我认为该应用程序并非旨在像这样工作。

所以我的问题是,为什么要丢弃我的上下文,如何阻止它呢?

单步执行代码无济于事,我没有想法。

亚历克斯

问题在于这条线:

container.Register<IUserStore<ApplicationUser, int>, UserStore <ApplicationUser, ApplicationRole, int, ApplicationUserLogin, ApplicationUserRole, ApplicationUserClaim>>(Lifestyle.Scoped);

由于lifestlye.scoped,此时已处理上下文。

我需要将此添加到container

container.Options.DefaultScopedLifestyle = new WebApiRequestLifestyle();

这些说明中的内容:http : //simpleinjector.readthedocs.io/en/latest/lifetimes.html#perwebrequest

哪个仅在Web请求结束时处理对象

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在将列添加到数据库后,为什么我的实体框架上下文未更新?

来自分类Dev

在MVC中使用using语句处置数据库上下文

来自分类Dev

为什么会出现此上下文和数据库错误?

来自分类Dev

为什么我需要一个ToList()来避免处置上下文错误?

来自分类Dev

为什么将单个实体保存到我的 EF Core 数据库上下文会导致多次插入?

来自分类Dev

为什么 .NET Core 范围会影响数据库上下文更新的可见性?

来自分类Dev

我们是否必须显式添加到数据库上下文?

来自分类Dev

我的数据库上下文引用总是返回 null,如何解决?

来自分类Dev

从我的数据库上下文中基于ID删除用户

来自分类Dev

在我的域模型中有数据库上下文可以吗

来自分类Dev

尝试在每个 DB 上下文上创建我的数据库时出错

来自分类Dev

上下文为空,所以我无法打开数据库

来自分类Dev

ASP.NET MVC中的数据库上下文类的目的是什么

来自分类Dev

SignalR 和数据库上下文处理

来自分类Dev

使用不同的上下文访问数据库

来自分类Dev

数据库上下文中缺少GetTable <TEntity>()

来自分类Dev

TimerTrigger 不注入 EF 数据库上下文

来自分类Dev

数据库上下文和任务

来自分类Dev

数据库和上下文太多错误

来自分类Dev

Sqlite 数据库上下文 android

来自分类Dev

Linq Sql数据库上下文丢失方法

来自分类Dev

Glass上下文数据库null

来自分类Dev

多上下文内存数据库

来自分类Dev

通过SignalR Core访问数据库上下文

来自分类Dev

从哪里获取数据库查询的上下文?

来自分类Dev

为什么将绑定数据上下文设置为控件的数据上下文?

来自分类Dev

为什么当上下文值更新时我的上下文不更新?

来自分类Dev

流星:为什么我通过将function(){}切换为()=> {}来丢失数据上下文?

来自分类Dev

为什么上下文未传递到我的HOC

Related 相关文章

  1. 1

    在将列添加到数据库后,为什么我的实体框架上下文未更新?

  2. 2

    在MVC中使用using语句处置数据库上下文

  3. 3

    为什么会出现此上下文和数据库错误?

  4. 4

    为什么我需要一个ToList()来避免处置上下文错误?

  5. 5

    为什么将单个实体保存到我的 EF Core 数据库上下文会导致多次插入?

  6. 6

    为什么 .NET Core 范围会影响数据库上下文更新的可见性?

  7. 7

    我们是否必须显式添加到数据库上下文?

  8. 8

    我的数据库上下文引用总是返回 null,如何解决?

  9. 9

    从我的数据库上下文中基于ID删除用户

  10. 10

    在我的域模型中有数据库上下文可以吗

  11. 11

    尝试在每个 DB 上下文上创建我的数据库时出错

  12. 12

    上下文为空,所以我无法打开数据库

  13. 13

    ASP.NET MVC中的数据库上下文类的目的是什么

  14. 14

    SignalR 和数据库上下文处理

  15. 15

    使用不同的上下文访问数据库

  16. 16

    数据库上下文中缺少GetTable <TEntity>()

  17. 17

    TimerTrigger 不注入 EF 数据库上下文

  18. 18

    数据库上下文和任务

  19. 19

    数据库和上下文太多错误

  20. 20

    Sqlite 数据库上下文 android

  21. 21

    Linq Sql数据库上下文丢失方法

  22. 22

    Glass上下文数据库null

  23. 23

    多上下文内存数据库

  24. 24

    通过SignalR Core访问数据库上下文

  25. 25

    从哪里获取数据库查询的上下文?

  26. 26

    为什么将绑定数据上下文设置为控件的数据上下文?

  27. 27

    为什么当上下文值更新时我的上下文不更新?

  28. 28

    流星:为什么我通过将function(){}切换为()=> {}来丢失数据上下文?

  29. 29

    为什么上下文未传递到我的HOC

热门标签

归档