首页 > 解决方案 > 来自 Json 文件的 .Net Core 种子数据库

问题描述

我一直在寻找在 .Net Core 3.1 MVC 应用程序上播种数据的方法。从文档开始,我发现了很多示例。我还没有找到使用 (Json/XML) 文件的好的、真实的完整示例。我发现的最接近的一个没有显示如何正确获取(Json/XML)文件的位置,无论使用何种平台。我无法成功集成在其他堆栈溢出问题上发现的 DI 解决方案,这让我认为这是不可能的。希望有人可以提供帮助。

谢谢!

标签: asp.net-core.net-coreentity-framework-core

解决方案


我发现的最接近的一个没有显示如何正确获取(Json/XML)文件的位置,无论使用何种平台。

如果您的 json 文件存在于物理磁盘中,则只需使用原始物理位置:

using (StreamReader r = new StreamReader(@"C:\xxx\xxx\test.json"))

如果您的 json 文件存在于项目和根项目中,请使用以下位置:

using (StreamReader r = new StreamReader(@"test.json"))

如果它存在于项目的文件夹中,您可以使用如下位置:

using (StreamReader r = new StreamReader(@"wwwroot/test.json"))

还有一件事你需要知道,尽管你有多个具有关系的模型,但请确保 json 应该只包含一个模型的数据。

这是一个示例代码:

1.型号:

public class Test
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int UserId { get; set; }
    public List<User> User { get; set; }
}
public class User
{
    public int Id { get; set; }
    public int Age { get; set; }
}

2.DbContext:

public class YourDbContext : DbContext
{
    public YourDbContext(DbContextOptions<YourDbContext> options)
        : base(options)
    {
    }

    public DbSet<Test> Test { get; set; }
    public DbSet<User> User { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Test>().HasData(SeedTestData());
    }
    public List<Test> SeedTestData()
    {
        var tests = new List<Test>();
        using (StreamReader r = new StreamReader(@"test.json"))
        {
            string json = r.ReadToEnd();
            tests = JsonConvert.DeserializeObject<List<Test>>(json);
        }
        return tests;
    }
    public List<User> SeedUserData()
    {
        var users = new List<User>();
        using (StreamReader r = new StreamReader(@"test2.json"))
        {
            string json = r.ReadToEnd();
            users = JsonConvert.DeserializeObject<List<User>>(json);
        }
        return users;
    }
}

3.在包管理器控制台中运行以下命令:

>PM Add-Migration init
>PM Update-Database

测试.json:

[
  {
    "id": 1,
    "name": "aa"
  },
  {
    "id": 2,
    "name": "bb"
  },
  {
    "id": 3,
    "name": "cc"
  }
]

test2.json:

[
  {
    "id": 1,
    "age": 34
  },
  {
    "id": 2,
    "age": 21
  }
]

推荐阅读