gpt4 book ai didi

c# - 如何在 Entity Framework Core 3.0 中播种?

转载 作者:行者123 更新时间:2023-12-03 15:53:21 25 4
gpt4 key购买 nike

我正在尝试使用 ASP.NET CORE 3.0 和 EF Core 为数据库设置一些数据。

我已经创建了我的 DbContext 并根据 documentation , online sources ,甚至 EF Core 2.1 questions (我找不到有关此主题的任何重大更改)。

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Band>().HasData(
new Band()
{
Id = Guid.Parse("e96bf6d6-3c62-41a9-8ecf-1bd23af931c9"),
Name = "SomeName",
CreatedOn = new DateTime(1980, 2, 13),
Description = "SomeDescription"
});

base.OnModelCreating(modelBuilder);
}

这不符合我的预期:启动应用程序时没有任何种子(即使在调试期间从某处调用该方法)。

但是,如果我添加迁移,迁移包含相应的插入语句(这不是我正在寻找的种子类型)。

问题:在应用程序启动时执行数据库种子的正确方法是什么?

通过为数据库设置种子,我的意思是我希望每次启动应用程序时都可以在某些表中确保某些数据。

我可以选择创建种子类并在使用自定义代码的 Database.Migrate 之后处理它,但这似乎是一种解决方法,因为文档指定应使用 OnModelCreating 来种子数据)。

因此,在阅读答案并重新阅读文档后,我的理解是,“种子”是指可以在数据模型旁边进行的“初始化”(这就是为什么感觉很奇怪 - 将模型创建与数据播种部分)。

最佳答案

如果您想在应用程序启动时播种,在您的应用程序启动方法中,您可以使用条件检查来检查您想要的数据,如果没有返回,则将这些类添加到上下文中并保存更改。

EF Core 中的播种是为迁移而设计的,它为数据库初始化数据,而不是为应用程序运行时。如果您希望一组数据保持不变,那么请考虑使用替代方法?就像通过带有字段检查的属性将其保存在 xml/json 格式并在内存中缓存一样。

您可以在应用程序启动时使用删除/创建语法,但由于状态缺乏永久性,它通常不受欢迎。

不幸的是,对于您想要的东西,它必须是一种解决方法,因为它不在 EF 的预期功能范围内。

关于c# - 如何在 Entity Framework Core 3.0 中播种?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60116577/

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