gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:46:12 24 4
gpt4 key购买 nike

我使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com