gpt4 book ai didi

c# - EF Core 2.1 HasData() 在后续迁移中为未更改的实体创建删除和重新插入

转载 作者:行者123 更新时间:2023-11-30 12:55:01 25 4
gpt4 key购买 nike

2018 年 8 月 29 日更新

在种子数据的内联 new 中也看到了这个问题。开了一个EF Core issue .将用任何发现更新问题。


我正在尝试使用 EF Core 2.1's seeding mechanism .但是,我想从 json 平面文件加载种子数据,而不是硬编码新的 C# 对象。我在下面编写了扩展方法,它在初始迁移时效果很好。它在 DataPath 中查找名为 [MyEntity].json 的文件,并将它们反序列化为对象。

问题是,如果我添加后续迁移,即使不更改模型、配置或 json 文件中的任何内容,新迁移也会删除每个实体并再次重新插入它们。因此,Up() 包含一堆删除,然后是一堆相同数据的插入。我怀疑这是因为 EF Core 不够智能,无法识别它是一组相同的种子数据。

问题:

有没有一种方法可以将 EF Core 2.1 种子与外部数据源(例如 json 文件)一起使用,而无需每次迁移都删除并重新插入数据?

我的播种扩展方法:

public static class ModelBuilderExtensions
{
public static string DataPath { private get; set; } = "..\\..\\data";

public static void Seed<TEntity>(this ModelBuilder modelBuilder) where TEntity : class, IBaseEntity
{
var entities = GetSeedRows<TEntity>();
modelBuilder.Entity<TEntity>().HasData(entities);
}

private static TEntity[] GetSeedRows<TEntity>() where TEntity : IBaseEntity
{
try
{
return JsonConvert.DeserializeObject<TEntity[]>(
File.ReadAllText(DataPath + Path.DirectorySeparatorChar + typeof(TEntity).Name + ".json"));
}
catch (FileNotFoundException e)
{
Console.WriteLine(e.Message);
return null;
}
}
}

最佳答案

此问题是一个 EF Core 错误 was resolved在 EF Core 2.2 中。

关于c# - EF Core 2.1 HasData() 在后续迁移中为未更改的实体创建删除和重新插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52067079/

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