Asp.Net DbContext ...为什么在我的应用程序中经常调用它? ......困惑

时间:2015-07-04 02:57:10

标签: asp.net asp.net-mvc asp.net-mvc-5 dbcontext asp.net-identity-2

要学习Asp.Net Identity我一直在使用Microsoft提供的Identity Samples模板,该模板可以通过NuGet下载。

https://www.nuget.org/packages/Microsoft.AspNet.Identity.Samples/2.1.0-alpha1

包管理器控制台中的OR运行:

安装包Microsoft.AspNet.Identity.Samples -Pre

请注意

此示例与Visual Studios附带的示例不同。 VS附带的产品仍使用Identity V1.0,NuGet上的软件包使用V2.1。因此,我没有在VS示例中仅验证NuGet的这种行为。

我的简单问题是,为什么DbContext实例(ApplicationDbContext)在我加载的每个页面上调用,而不仅仅是使用数据库的页面/操作?

例如,如果我在ApplicationDbContext方法上放置一个断点,然后从Index页面导航到Contact页面,或者从Index页面导航到Index页面,甚至导航到我创建的随机测试页面,则会触发DBContext方法并运行所有UserManager,RoleManager和SignInManager代码。

这是正常的吗?返回与DB无关的视图似乎还有很多额外的工作......

1 个答案:

答案 0 :(得分:0)

Identity有一个配置选项来检查cookie - 如果它仍然有效。不确定您下载的nuget的默认值是什么,但您可以在App_Start\Startup.Auth.cs中更改它,查找如下代码:

        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            LoginPath = new PathString("/Account/Login"),
            Provider = new CookieAuthenticationProvider
            {
                // Enables the application to validate the security stamp when the user logs in.
                // This is a security feature which is used when you change a password or add an external login to your account.  
                OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, ApplicationUser>(
                    validateInterval: TimeSpan.FromMinutes(30),
                    regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
            }
        });        

您需要检查validateInterval参数,如果时间非常短,请将其设置为10-15分钟。

有关完整的示例文件,请参阅here