我使用 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"
});
}
但是我得到一个错误:
An attempt was made to use the model while it was being created. A DbContext instance cannot be used inside OnModelCreating in any way that makes use of the model that is being created.
最佳答案
这超出了“数据库播种”的范畴。在创建/更新数据库时播种“确保”数据存在,并且要在“迁移时间”完成,此时您可能没有完全配置的数据库(在执行代码时,您正在为 EF 定义模型:您甚至可能没有现成的真实数据库来查询数据:这就是您看到的错误)。
如果您正在处理数据库本身的一些逻辑,而不是在“数据库设计时”,那么不要在模型创建时执行此操作,并在您的应用程序启动时(或在任何其他时间)运行该逻辑时间点),之后数据库被创建和播种。
关于c# - EF 核心 : how to validate data exists by condition in OnModelCreating,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57201037/