首先实现ASP.NET应用程序数据库的OWIN数据库上下文



我正在读的书中说,我应该使用OWIN来获取使用Identity的数据库上下文的实例。。。但我首先使用数据库,所以我希望在整个应用程序中使用数据库上下文的实例。

我以以下方式实现了OWIN的"Start"类:

using Owin;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using uQuiz.Domain;
using uQuiz.Domain.Concrete;
using uQuiz.WebUI.Infrastructure;
namespace uQuiz
{
    public class OwinStart
    {
        /// <summary>
        /// Configures OWIN
        /// </summary>
        /// <param name="app"></param>
        public void Configuration(IAppBuilder app)
        {
            app.CreatePerOwinContext<QuizEntities>(GetQuizEntities);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
        }
        /// <summary>
        /// Returns an instance of the QuizEntities database context for OWIN
        /// </summary>
        /// <returns></returns>
        public static QuizEntities GetQuizEntities()
        {
            return new QuizEntities();
        }
    }
}

正如您所看到的,我在那里有一个函数,它只生成我的数据库上下文QuizEntities的一个实例,这是数据库第一个自动生成的实例。

我知道在数据库上下文中使用"Create"方法是正常的做法,但我不能这样做,因为它是自动生成的。

我的问题:

  • 以这种方式创建一个实例"per OWIN"是否有负面影响
  • 这是一种可以接受的实施方式吗
  • 对应用程序中的Identity和其他请求使用相同的数据库上下文是否可以接受

您正在为每个OWIN上下文而不是每个OWIN创建数据库上下文。这不是一个单独的例子。对于每个传入的请求,都会创建一个数据库上下文。因此OWIN为每个请求调用GetQuizEntities来创建一个新的数据库上下文。

以这种方式创建一个实例"per OWIN"是否有负面影响?

不,你必须按照现在的方式来做,否则你的数据库上下文会变得臃肿。为每个请求创建一个新的数据库上下文。正确的

这是一种可以接受的实施方式吗?

是的。

对应用程序中的Identity和其他请求使用相同的数据库上下文是否可以接受?

我不知道你的意思。

最新更新