OnConguring()&AddDbContext()

问题描述 投票:0回答:1

我正在尝试使用Entity Framework Core。因此,在课程中。我安装了现有的数据库对象。因此,应用程序生成了带有所有DBSet对象的EmployeeContext.cs文件。然后就生成了OnConfiguring()重载方法。

现在,我在Startup.cs

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
            services.AddAuthorization(options =>
            {
                //options.AddPolicy("RequireManagerOnly", policy =>
                //       policy.RequireRole("Manager"));

                options.AddPolicy(
                    "ApiUser", policy =>
                    policy.Requirements.Add(
                          new ApiUserVerification(5)));
            });
            services.AddSingleton<IAuthorizationHandler,
              ApiRoleHandler>();

            var connectionStrings = Configuration.GetConnectionString("ScreeningContext");
            services.AddDbContext<EmployeeContext>(options => options.UseSqlServer(connectionStrings));
}

EmployeeContext.cs

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
                optionsBuilder.UseSqlServer("server details");
            }
        }

但是现在,当我在上下文类中评论OnConfiguring()重载方法并发布POSTMAN的get请求时,我收到500-内部服务器错误。如果我取消注释OnConfiguring(),则可以发布请求。我不明白为什么?尽管我在Startup.cs中注册了DbContext]

任何人都可以提供我所想念的地方。

谢谢

asp.net-core asp.net-core-2.1 ef-core-2.2
1个回答
0
投票
简而言之,如果您使用通用Windows平台(UWP),则应使用:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

设置您的DBContext。

但是由于您使用的是AspNet Core,因此最好在Startup.cs中进行所有设置

public void ConfigureServices(IServiceCollection services)

如果您不删除此代码:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
#warning To protect potentially sensitive information in your connection string, you should move it out of source code. See http://go.microsoft.com/fwlink/?LinkId=723263 for guidance on storing connection strings.
                optionsBuilder.UseSqlServer("server details");
            }
        }

它将覆盖您在startup.cs中所做的设置,并使用“ optionsBuilder.UseSqlServer(” server details“);”作为您的连接字符串。

您可能也曾在启动时输入过错字。

services.AddDbContext<Employee>(options => options.UseSqlServer(connectionStrings));

也许应该是:

services.AddDbContext<EmployeeContext>(options => options.UseSqlServer(connectionStrings));
© www.soinside.com 2019 - 2024. All rights reserved.