我正在尝试通过EF创建数据库,以存储成员及其位置。
我看过其他示例,但是无论我做什么,当我运行程序时,都不会创建数据库。
我注意到我遵循的示例创建了一个DataInitializer类,该类将一些记录放入数据库中。我还没有这样做,因为我想检查数据库是否使用正确的列创建。
问题出在数据库中吗?
public class ApplicationDbContext : DbContext
{
public DbSet<Lid> Leden { get; set; }
public DbSet<Locatie> Locaties { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ApplyConfiguration(new LidConfiguration());
builder.ApplyConfiguration(new LocatieConfiguration());
}
}
Appsettings.json:
{ "ConnectionStrings": {
"DefaultConnection": "Server=.\\sqlexpress;Database=Taijitan;Trusted_Connection=True;MultipleActiveResultSets=true"},
"Logging": {
"LogLevel": {
"Default": "Warning"
}
},
"AllowedHosts": "*"
}
在我遵循的示例中,startup.cs还包含
services.AddScoped<BeerhallDataInitializer>();
一直到底部
beerhallDataInitializer.InitializeData();
我不认为这是导致问题的原因,但我现在不确定了
编辑:
public class BeerhallDataInitializer
{
private readonly ApplicationDbContext _dbContext;
public BeerhallDataInitializer(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
}
public void InitializeData()
{
_dbContext.Database.EnsureDeleted();
if (_dbContext.Database.EnsureCreated())
{ *create new objects and add them to _dbcontext*
_dbContext.SaveChanges();
}
}
答案 0 :(得分:1)
要运行迁移,您首先需要使用以下命令创建迁移: 'dotnet ef迁移添加InitialCreate' 其次,然后您需要使用以下命令运行迁移: 'dotnet ef数据库更新'或通过创建一些运行缺少迁移的代码,我可以假设这是beerhallDataInitializer.InitializeData()所做的,但由于我没有更多信息,但是我不确定,因此可以通过代码迁移您需要在startup.cs文件中像这样引用IApplicationBuilder:
DbInitializer.Migrate<ApplicationDbContext>(app);
我的dbinitilizer是:
public static class DbInitializer
{
public static void Migrate<T>(IApplicationBuilder app) where T : DbContext
{
using (var scope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
{
scope.ServiceProvider.GetRequiredService<T>().Database.Migrate();
}
}
}
希望它可以在注释以下内容时提供帮助,但可以提供有关您所做操作的更多信息
编辑:
尝试将您的连接字符串更改为:
Data Source=localhost\\SQLEXPRESS;Initial Catalog=Taijitan;Integrated Security=True