我使用EF Core,并且想要添加预定义的数据。可以通过以下代码完成:
modelBuilder.Entity<UserPage>().HasData(new UserPage()
{
Name = "Homepage",
Editable = true,
Path = "path"
});
这部分代码验证具有确切数据的UserPage对象是否存在,如果不存在,则创建它
但是我只想在不存在带有Name = "Homepage"
的记录时添加新记录,否则不添加。即使上面已经存在名称为“ Homepage”的记录,但上面的代码也会添加新记录,例如Editable = false
。我想验证它,我尝试:
if (UserPages.Where(p => p.Name.Equals("Homepage", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault() == null)
{
modelBuilder.Entity<UserPage>().HasData(new UserPage()
{
Name = "Homepage",
Editable = true,
Path = "path"
});
}
但是我得到一个错误:
试图在创建模型时使用它。一种 不能以任何方式在OnModelCreating内部使用dbContext实例 利用正在创建的模型。
答案 0 :(得分:1)
这不在“数据库播种”的上下文中。当创建/更新数据库时,“确定”数据的种子存在 ,并且该数据将在“迁移时间”完成,此时您可能没有数据库已配置完毕(在代码执行时,您正在为EF定义模型:您甚至可能没有现成的真实数据库来查询数据:这是您看到的错误)。
如果您要处理的是数据库本身的某种逻辑,而不是在“数据库设计时”,那么不要在模型创建时执行,而是在应用程序启动时(或在其他任何时候)运行该逻辑时间点),然后在之后创建数据库并植入种子。