c# - EF 核心 : how to validate data exists by condition in OnModelCreating

标签 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"
            });
        }

但是我得到一个错误:

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/

相关文章:

c# - Entity Framework 查询缓存

c# - Entity Framework 分组并获得最大值

c# - 错误 CS0053 : Inconsistent Accessibility for DbSet Property in . NET Core Entity Framework - 如何解决?

c# - 从零开始自动递增 PK - EF Core 代码优先

c# - 水平列表框

c# - 动态按钮表

C# 和 .NET 3.5 - 如何使用不同的凭据启动进程,使用隐藏窗口,并能够捕获标准输出和退出代码?

c# - 如何将安全主体从我的请求传递到 asp.net MVC 中的线程

c# - 忽略联接实体的全局查询过滤器

c# - SelectList当bindproperty需要的值是asp.net和entity framework中的一个类