【问题标题】:EF Core: how to validate data exists by condition in OnModelCreatingEF Core:如何在 OnModelCreating 中按条件验证数据是否存在
【发布时间】:2019-12-03 16:14:57
【问题描述】:

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

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

这部分代码验证是否存在具有确切数据的 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"
            });
        }

但我得到一个错误:

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

【问题讨论】:

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


    【解决方案1】:

    这超出了“数据库播种”的范围。播种“确保”数据存在完全配置的数据库(在代码执行时,您正在将模型定义为 EF:您甚至可能没有现成的真实数据库来查询数据:这就是您看到的错误)。

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

    【讨论】:

      猜你喜欢
      • 2023-04-02
      • 2022-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-27
      • 2022-06-25
      • 2012-01-27
      • 2019-09-15
      相关资源
      最近更新 更多