C# EF核心:如何在OnModelCreating中按条件验证数据是否存在

C# EF核心:如何在OnModelCreating中按条件验证数据是否存在,c#,entity-framework,entity-framework-core,ef-core-2.0,seed,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" }); 但我有一个错误: 试图在

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

            modelBuilder.Entity<UserPage>().HasData(new UserPage()
            {
                Name = "Homepage",
                Editable = true,
                Path = "path"
            });
但我有一个错误:

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


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

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

        if (UserPages.Where(p => p.Name.Equals("Homepage", StringComparison.InvariantCultureIgnoreCase)).FirstOrDefault() == null)
        {
            modelBuilder.Entity<UserPage>().HasData(new UserPage()
            {
                Name = "Homepage",
                Editable = true,
                Path = "path"
            });
        }