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

亚历克斯

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

该应用程序是一个具有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

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Light在MVC中注入数据库上下文

来自分类Dev

静态数据库上下文混乱

来自分类Dev

Glass上下文数据库null

来自分类Dev

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

来自分类Dev

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

来自分类Dev

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

来自分类Dev

Glass上下文数据库null

来自分类Dev

SignalR 和数据库上下文处理

来自分类Dev

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

来自分类Dev

为什么设置流星模板数据上下文替换父数据上下文?

来自分类Dev

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

来自分类Dev

为什么我的Vue方法没有引用正确的上下文(数据)?

来自分类Dev

为什么我的数组没有上下文?

来自分类Dev

为什么我的主要上下文遍历标题?

来自分类Dev

为什么我的数组没有上下文?

来自分类Dev

如何通过我的课程(不是活动)访问我的数据库(使用上下文)

来自分类Dev

我需要不断向数据库中添加数据,但要保持上下文同步

来自分类Dev

如何在不访问上下文的情况下从线程更新我的Android SQLite数据库?

来自分类常见问题

工作单元模式不允许我创建没有选项的数据库上下文

来自分类Dev

我可以扩展API控制器来保存数据库上下文的变量吗?

来自分类Dev

每次我在ASP.NET MVC中调用动作时都会创建数据库上下文

来自分类Dev

工作单元模式不允许我创建没有选项的数据库上下文

来自分类Dev

我可以扩展API控制器来保存数据库上下文的变量吗?

Related 相关文章

  1. 1

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

  2. 2

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

  3. 3

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

  4. 4

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

  5. 5

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

  6. 6

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

  7. 7

    Light在MVC中注入数据库上下文

  8. 8

    静态数据库上下文混乱

  9. 9

    Glass上下文数据库null

  10. 10

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

  11. 11

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

  12. 12

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

  13. 13

    Glass上下文数据库null

  14. 14

    SignalR 和数据库上下文处理

  15. 15

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

  16. 16

    为什么设置流星模板数据上下文替换父数据上下文?

  17. 17

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

  18. 18

    为什么我的Vue方法没有引用正确的上下文(数据)?

  19. 19

    为什么我的数组没有上下文?

  20. 20

    为什么我的主要上下文遍历标题?

  21. 21

    为什么我的数组没有上下文?

  22. 22

    如何通过我的课程(不是活动)访问我的数据库(使用上下文)

  23. 23

    我需要不断向数据库中添加数据,但要保持上下文同步

  24. 24

    如何在不访问上下文的情况下从线程更新我的Android SQLite数据库?

  25. 25

    工作单元模式不允许我创建没有选项的数据库上下文

  26. 26

    我可以扩展API控制器来保存数据库上下文的变量吗?

  27. 27

    每次我在ASP.NET MVC中调用动作时都会创建数据库上下文

  28. 28

    工作单元模式不允许我创建没有选项的数据库上下文

  29. 29

    我可以扩展API控制器来保存数据库上下文的变量吗?

热门标签

归档