EF Core:如何通过 OnModelCreating 中的条件验证数据是否存在

EF Core: how to validate data exists by condition in OnModelCreating

我使用 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.

这超出了 "database seeding" 的范围。播种 "makes sure" 数据 存在 如您指定的那样 当数据库正在 created/updated 并且它将在 "migration time",当你可能根本没有配置数据库时(在代码执行时,你正在为 EF 定义模型:你甚至可能没有准备好的真实数据库来查询数据:这就是你的错误看见)。

如果您要处理的是数据库本身的一些逻辑,而不是 "database design time",那么请不要在模型创建时执行此操作,并且 运行 该逻辑在您的应用程序时执行开始(或在任何其他时间点), 数据库创建和播种之后。