gpt4 book ai didi

asp.net-core - 应用程序中断访问 dbcontext、Asp .net 核心 web api 2.0 与 Entity Framework 核心 2.0 数据库第一种方法

转载 作者:行者123 更新时间:2023-12-03 23:06:13 29 4
gpt4 key购买 nike

我已经使用 EntityFrameworkCore.SqlServer 2.0 开发了 asp .net core wep api 2.0 应用程序。它是使用数据库优先方法开发的。当尝试使用 dbcontext 应用程序访问实体时,应用程序将中断模式。我找不到应用程序状态变为中断状态的原因。请帮助解决这个问题。

下面是 DBContext 类中的 OnConfiguring 方法。

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(@"Server=(local);Database=VotingAppDB;User ID=sa;Password=123;");
}
}

下面的代码块用于访问 Controller 中的 dbcontext 实体
    // GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
VotingAppDBContext context = new VotingAppDBContext();
var questions = context.Questions.ToList();
return new string[] { "value1", "value2" };
}

Installed packages

Application error

最佳答案

1.-首先你不应该在 Controller 内部创建一个上下文,避免使用'new'和依赖,因为这会使你的代码无法测试,在我使用UnitOfWork的情况下,我将它作为IUnitOfWork实例注入(inject),事实上, MyConext 的扩展,您可以将其注入(inject) StartUp 类中...为此,我有一个私有(private)方法(在单个私有(private)调用中执行此操作),如下所示:

 private void AddEntityFrameworkAndDbContext(IServiceCollection services)
{
services.AddEntityFrameworkSqlServer();

var migrationsAssemblyName = typeof(MyContext).GetTypeInfo().Assembly.GetName().Name;
services.AddDbContext<MyContext>(options =>
{
options.UseSqlServer(
"MY CONNECTION STRING GOES HERE (BUT I RETREIVE IT FROM ANOTHER SERVICE)",
sqlServerOptionsAction: sqlOptions =>
{
sqlOptions.MigrationsAssembly(migrationsAssemblyName);
sqlOptions.EnableRetryOnFailure(maxRetryCount: 5, maxRetryDelay: TimeSpan.FromSeconds(30), errorNumbersToAdd: null);
});
},
ServiceLifetime.Scoped // Showing explicitly that the DbContext is shared across the HTTP request scope (graph of objects started in the HTTP request)
).AddUnitOfWork<MyContext>(); // This is because I'm also using EF Core Unit of work NuGet Package
}

正如我所说,我在 StartUp 类中从 ConfigureServices(IServiceCollection services) 调用该私有(private)方法
        // Add EF, and UoW
AddEntityFrameworkAndDbContext(services);

2.- 其次( 但我会说这是你真正的问题 )我会说你错过了 base.OnConfiguring(options);在您的上下文中,它应该类似于:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (!optionsBuilder.IsConfigured)
{
optionsBuilder.UseSqlServer(@"Server=(local);Database=VotingAppDB;User ID=sa;Password=123;");
}
base.OnConfiguring(optionsBuilder);
}

另外,请看一下我几周前写的这个答案:
How to setup EF6 Migrations with ASP.NET Core

此外,UnitOfWork 项目值得一读,请在此处查看: https://github.com/arch/UnitOfWork

我希望它有所帮助,

胡安

关于asp.net-core - 应用程序中断访问 dbcontext、Asp .net 核心 web api 2.0 与 Entity Framework 核心 2.0 数据库第一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45852923/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com