【发布时间】:2019-07-11 20:24:03
【问题描述】:
我正在尝试通过 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();
}
}
【问题讨论】:
-
您能否展示配置 EF 以使用该连接字符串的部分?
BeerhallDataInitializer是什么样的? -
如果你想要一个空数据库,那么你不需要数据库初始化器,你可以使用现有的初始化器之一。您是否尝试仅使用字符串参数“MyDatabase”创建 DbContext?您是否尝试作为初始化器
DropCreateDatabaseAlways<ApplicationDbContext>,它是否在OnModelCreating中达到了您的断点?
标签: c# database entity-framework model-view-controller