首先实现ASP.NET应用程序数据库的OWIN数据库上下文
本文关键字:数据库 OWIN 上下文 应用程序 NET 实现 ASP | 更新日期: 2023-09-27 18:21:24
我正在读的书中说,我应该使用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和其他请求使用相同的数据库上下文是否可以接受?
我不知道你的意思。