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

Ole*_* Sh 3 c# entity-framework seed entity-framework-core ef-core-2.0

我使用 EF Core 并想添加预定义的数据。可以通过以下代码完成:

            modelBuilder.Entity<UserPage>().HasData(new UserPage()
            {
                Name = "Homepage",
                Editable = true,
                Path = "path"
            });
Run Code Online (Sandbox Code Playgroud)

这部分代码验证具有确切数据的 UserPage 对象是否存在,如果不存在,则创建它但我只想在记录Name = "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"
            });
        }
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

在创建模型时尝试使用该模型。DbContext 实例不能以任何使用正在创建的模型的方式在 OnModelCreating 中使用。

Jcl*_*Jcl 5

这超出了“数据库播种”的范围。当您在创建/更新数据库时指定数据播种“确保”数据存在并且将在“迁移时间”完成,当您可能根本没有配置数据库时(在代码执行时,您正在为 EF 定义模型:您甚至可能没有现成的真实数据库来查询数据:这就是您看到的错误)。

如果您所追求的是处理数据库本身的一些逻辑,而不是在“数据库设计时”,那么不要在模型创建时执行此操作,并在您的应用程序启动时(或在任何其他时间点)运行该逻辑),数据库创建和播种之后。