【发布时间】:2018-01-12 21:44:28
【问题描述】:
我正在关注本教程: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()
【问题讨论】:
标签: .net entity-framework .net-core