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

时间:2014-09-11 07:34:46

标签: c# asp.net-mvc dbcontext owin

我读过的书说我应该使用OWIN获取我的数据库上下文的实例以使用Identity ...但是我先使用数据库所以我想拥有一个数据库实例在我的申请中使用的上下文。

我已经实施了“开始”' OWIN的类以下列方式:

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的单个实例,它首先是数据库,因此自动生成。

我知道通常的做法是创建&#39;数据库上下文中的方法,但我不能这样做,因为它是自动生成的。

我的问题:

  • 根据OWIN&#39;创建实例是否存在缺陷?这样吗?
  • 这是一种可以接受的实施方式吗?
  • 在应用程序中对Identity和其他请求使用相同的数据库上下文是否可以接受?

1 个答案:

答案 0 :(得分:3)

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

  

根据OWIN&#39;创建实例是否存在缺陷?这样吗?

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

  

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

是的。

  

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

我不确定你的意思。