asp.net-core - 来自 Json 文件的 .Net Core 种子数据库
问题描述
我一直在寻找在 .Net Core 3.1 MVC 应用程序上播种数据的方法。从文档开始,我发现了很多示例。我还没有找到使用 (Json/XML) 文件的好的、真实的完整示例。我发现的最接近的一个没有显示如何正确获取(Json/XML)文件的位置,无论使用何种平台。我无法成功集成在其他堆栈溢出问题上发现的 DI 解决方案,这让我认为这是不可能的。希望有人可以提供帮助。
谢谢!
解决方案
我发现的最接近的一个没有显示如何正确获取(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
}
]
推荐阅读
- asp.net-core - JsonConverterAttribute 不适用于 ASP.NET Core 3.1 / 5.0 中的反序列化
- python - docker build 以流错误消息结束
- java - 如何在 android studio 中使用 Retrofit?我的问题是什么?
- advanced-custom-fields - 将 Group 字段中的 ACF sub_field 内容查询到博客文章单页中
- flutter - 扑动类构造函数错误 - “@required this。”
- kubernetes - 如何从 Helm 的父图表中覆盖 values.yaml
- redux - Javascript 中的 Redux 源目录结构
- opencv - 从产品标签中检测信息
- python - 我的 discrod 音乐机器人中的一些下载错误
- c# - 二进制格式化程序没有真正工作(Unity,C#)