我在创建数据库时使用CreateDatabaseIfNotExists,但它不会删除数据库,然后开始初始化它。 有我的DbContext。
public class AppDbContext : DbContext
{
public AppDbContext() : base("Valtrends")
{
InitializeDbContext();
}
public DbSet<FactorType> FactorTypes { get; set; }
public DbSet<ComplexType> ComplexTypes { get; set; }
public DbSet<Value> Values { get; set; }
public DbSet<DataLoader.Entities.Version> Versions { get; set; }
public DbSet<DefaultPlotData> DefaultPlotData { get; set; }
public DbSet<GraphBucket> GraphBuckets { get; set; }
public DbSet<XfactorFrom> XfactorsFrom { get; set; }
public DbSet<XfactorTo> XfactorsTo { get; set; }
public DbSet<DistributionData> DistributionData { get; set; }
public DbSet<Bin> Bins { get; set; }
public DbSet<DefaultPlotSettings> DefaultPlotSettings { get; set; }
private void InitializeDbContext()
{
Database.SetInitializer(new AppDbInitializer());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<FactorType>().HasMany(m => m.CompatibilityListXY).WithMany();
}
}
}
还有AppDbInitializer的第一部分。
public class AppDbInitializer : CreateDatabaseIfNotExists<AppDbContext>//DropCreateDatabaseAlways<AppDbContext>
{
public override void InitializeDatabase(AppDbContext context)
{
base.InitializeDatabase(context);
var jsonImporter = new JsonImporter();
List<DataLoader.Entities.Version> versions = (jsonImporter.ImportFromJson<List<DataLoader.Entities.Version>>("Versions.json"));
context.Versions.AddRange(versions);
context.SaveChanges();
在SaveChanges之后,我在实体版本上违反了主键异常。
答案 0 :(得分:1)
我在创建数据库时使用CreateDatabaseIfNotExists,但它不会删除数据库然后开始初始化它
它永远不会删除现有数据库。顾名思义,它会检查数据库是否存在,如果是,则不执行任何操作,否则会创建并初始化它。
另请注意,InitializeDatabase
的{{1}}方法总是被调用,它是实现它的类,负责执行的实际操作。
在您的情况下,您错误地认为基本方法将始终创建新数据库,但实际情况并非如此。如果要添加仅在创建新数据库时执行的代码,则应改为覆盖IDatabaseInitializer
方法:
Seed