gpt4 book ai didi

.net - Database.EnsureCreated() 不创建表

转载 作者:行者123 更新时间:2023-12-03 23:46:05 27 4
gpt4 key购买 nike

我正在关注本教程:https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/intro

TournamentDbContext.cs:

public class TournamentDbContext : DbContext
{
public TournamentDbContext(DbContextOptions<TournamentDbContext> options) : base(options)
{
}

public DbSet<Tournaments> Tournaments { get; set; }
public DbSet<TournamentType> TournamentType { get; set; }
}

程序.cs
  public static void Main(string[] args)
{
var host = BuildWebHost(args);

using (var scope = host.Services.CreateScope())
{
var services = scope.ServiceProvider;
try
{
var TournamentDb = services.GetRequiredService<TournamentDbContext>();
DbInitializer.Initialize(TournamentDb);
}
catch (Exception ex)
{
var logger = services.GetRequiredService<ILogger<Program>>();
logger.LogError(ex, "An error occurred while seeding the database.");
}
}

host.Run();
}

初始化方法:
public static void Initialize(TournamentDbContext context)
{
context.Database.EnsureCreated();

if (!context.Tournaments.Any())
{
context.TournamentType.Add(new Models.Tournaments.TournamentType { Id = 1, Type = "LAN EVENT" });
context.Tournaments.Add(new Models.Tournaments.Tournaments { Id = 1, Name = "Dummy lan tournament", TournamentTypeId = 1, DateFrom = DateTime.Now, DateTo = DateTime.MaxValue, SalesOpen = DateTime.Now, SalesClose = DateTime.MaxValue, Active = true, DateCreated = DateTime.Now });
context.SaveChanges();
}
}

每当我运行它时,总是会抛出异常。
“你调用的对象是空的。”
使用以下堆栈跟踪:
Stacktrace: StackTrace = "   at Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore.DatabaseErrorPageMiddleware.System.IObserver<System.Collections.Generic.KeyValuePair<System.String,System.Object>>.OnNext(KeyValuePair`2 keyValuePair)\r\n   at System.Diagnostics.DiagnosticListener

如果我运行调试器,它会通过 EnsureCreated() 方法,但它不会创建表。异常被抛出: !context.Tournaments.Any()
任何想法如何解决这一问题?

更新 : 我在我的笔记本电脑上试过这个,同样的问题。我还尝试进行初始迁移(添加迁移、更新数据库)并更改 context.Database.EnsureCreated()到 context.Database.Migrate()。和错误是一样的,除了出现的问题是 context.SaveChanges()

最佳答案

基本上,我不知道该教程中会发生什么,或者该解决方案为何有效。

我发现服务还没有内置在 program.cs 中,这就是代码不起作用的原因。我正在使用的解决方法是这个

    public static void Seed(IServiceCollection services)
{
ServiceProvider serviceProvider = services.BuildServiceProvider();
var TournamentDb = serviceProvider.GetRequiredService<TournamentDbContext>();
DbInitializer.Initialize(TournamentDb);
}

在 Startup.cs 中,我在内部调用 public void ConfigureServices(IServiceCollection services)使用 Startup.Seed(services) .

我不知道这是否是它的用途,但它确实有效。

关于.net - Database.EnsureCreated() 不创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48234411/

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