如何使用具有最小 API .Net 6 的 Asp.net core Identity 运行迁移(第一次迁移)
Posted
技术标签:
【中文标题】如何使用具有最小 API .Net 6 的 Asp.net core Identity 运行迁移(第一次迁移)【英文标题】:How can I run migration (first migration) with Asp.net core Identity with Minimal API .Net 6 【发布时间】:2021-11-22 08:55:24 【问题描述】:我已经创建了一个 asp.net 6 最小的 API 项目,它的结构如下:
Program.cs
using WebApplication1.EndPointExtension;
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddEndpointDefinitions(typeof(IEndpointDefinition));
var app = builder.Build();
app.UseEndpointDefinitions();
if (builder.Environment.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();
app.Run();
IEndpointDefinition.cs
public interface IEndpointDefinition
void DefineServices(IServiceCollection services);
void DefineEndpoints(WebApplication app);
EndpointDefinition.cs
public static class EndpointDefinitionExtensions
public static void AddEndpointDefinitions(
this IServiceCollection services, params Type[] scanMarkers)
var endpointDefinitions = new List<IEndpointDefinition>();
foreach (var marker in scanMarkers)
endpointDefinitions.AddRange(
marker.Assembly.ExportedTypes
.Where(x => typeof(IEndpointDefinition).IsAssignableFrom(x) && !x.IsInterface && !x.IsAbstract)
.Select(Activator.CreateInstance).Cast<IEndpointDefinition>());
foreach (var endpointDefinition in endpointDefinitions)
endpointDefinition.DefineServices(services);
services.AddSingleton(endpointDefinitions as IReadOnlyCollection<IEndpointDefinition>);
public static void UseEndpointDefinitions(this WebApplication app)
var definitions = app.Services.GetRequiredService<IReadOnlyCollection<IEndpointDefinition>>();
foreach (var endpointDefinition in definitions)
endpointDefinition.DefineEndpoints(app);
下面是我的 DB Context 类,它实现了端点接口并继承了核心标识类 DatabaseDBContext.cs
public class DatabaseDBContext : IdentityDbContext, IEndpointDefinition
public DatabaseDBContext(DbContextOptions<DatabaseDBContext> options) : base(options)
public void DefineEndpoints(WebApplication app)
app.UseAuthentication();
public void DefineServices(IServiceCollection services)
services.AddIdentity<IdentityUser, IdentityRole>().AddEntityFrameworkStores<DatabaseDBContext>();
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json")
.Build();
var connectionString = configuration.GetConnectionString("AppDb");
if (!optionsBuilder.IsConfigured)
optionsBuilder.UseSqlServer(connectionString);
protected override void OnModelCreating(ModelBuilder modelBuilder)
base.OnModelCreating(modelBuilder);
我已经安装了迁移所需的 NuGet 包,并在 appsetting.js 中提供了连接字符串,但是当我构建项目时,它显示错误为
System.MissingMethodException:'无法动态创建类型为'WebApplication1.DatabaseDBContext'的实例。原因:没有定义无参数构造函数
我想知道到底哪里出了问题,或者我没有使用正确的方法。
【问题讨论】:
您是否尝试注册您的DbContext
?即调用AddDbContext
或AddDbContextPool
?
@GuruStron 这个错误很有趣,但我只是明确地调用了默认构造函数并且它起作用了。例如。公共 DatabaseDBContext()
【参考方案1】:
经过这么多次尝试解决它,我只是显式调用了默认构造函数
public DatabaseDBContext()
它成功了。
【讨论】:
以上是关于如何使用具有最小 API .Net 6 的 Asp.net core Identity 运行迁移(第一次迁移)的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET 中使用具有 HTML 正文 + 附件的 GMAIL API 发送电子邮件
如何使用 ASP.NET 5 MVC 6 保护 Web API
使用具有多个来源的 PUT 和 DELETE 请求时如何解决 ASP.NET Web API CORS Preflight 问题?
如何在 Asp.NET Core WEB API 中使用 .Net (C#) 在 Payload 中创建具有自定义 JSON 声明的 JWT 令牌