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

时间:2019-07-25 11:35:13

标签: c# entity-framework entity-framework-core ef-core-2.0 seed

我使用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实例   利用正在创建的模型。

1 个答案:

答案 0 :(得分:1)

这不在“数据库播种”的上下文中。当创建/更新数据库时,“确定”数据的种子存在 ,并且该数据将在“迁移时间”完成,此时您可能没有数据库已配置完毕(在代码执行时,您正在为EF定义模型:您甚至可能没有现成的真实数据库来查询数据:这是您看到的错误)。

如果您要处理的是数据库本身的某种逻辑,而不是在“数据库设计时”,那么不要在模型创建时执行,而是在应用程序启动时(或在其他任何时候)运行该逻辑时间点),然后在之后创建数据库并植入种子。