c# - 与 ID 未知的对象相关的种子数据
问题描述
我在将数据播种到 EF Core DB 时遇到问题。数据由具有Person
对象作为其导演的关系的电影组成。这种关系的基础是一部电影应该有一个导演,并且数据库中的每个导演实体都有一部导演的电影(不理想,但除此之外)。当我尝试在数据库中播种初始数据时,就会出现问题。由于我正在播种电影和导演,因此我无法事先知道实体的 ID,并且我需要能够在创建与其相关的电影之前搜索具有给定名称的导演的上下文.
例如:
这是人民(导演)的播种
public void Configure(EntityTypeBuilder<Person> builder)
{
builder.ToTable("Persons");
builder.Property(p => p.Id).HasColumnName("Id");
builder.HasData(
new Person
{
Id = Guid.NewGuid().ToString(),
Name = "Ridley Scott"
}
);
}
这是电影的种子
public void Configure(EntityTypeBuilder<Movie> builder)
{
using AtlasDbContext context = new AtlasDbContext();
Person director = context.Persons.FirstOrDefault(p => p.Id.Equals("Ridley Scott"));
builder.ToTable("Movies");
builder.Property(m => m.Id).HasColumnName("Id");
builder.HasData(
new Movie
{
Title = "The Martian",
Poster = File.ReadAllBytes($"{Environment.CurrentDirectory}\\wwwroot\\img\\TheMartian.poster.jpg"),
Cover = File.ReadAllBytes($"{Environment.CurrentDirectory}\\wwwroot\\img\\TheMartian.cover.jpg"),
ReleaseYear = "2015",
SubTitle = "Bring Him Home",
UserScore = 77,
Overview = "During a manned mission to Mars," +
"Astronaut Mark Watney is presumed dead after a fierce storm and left behind by his crew. " +
"But Watney has survived and finds himself stranded and alone on the hostile planet. " +
"With only meager supplies, he must draw upon his ingenuity, " +
"wit and spirit to subsist and find a way to signal to Earth that he is alive.",
DirectorId = director?.Id,
Budget = 108000000,
Revenue = 630161890,
Genres = new List<Genre>
{
Genre.Adventure,
Genre.Drama,
Genre.ScienceFiction
}
}
);
}
数据库上下文是在没有依赖注入的情况下实例化的,因为我无法在重写的方法中对上下文进行 DI。但是,当我尝试为此种子创建迁移时,迁移会成功构建,但不会创建任何内容,并且终端无法输入(卡在“构建成功”上),这让我相信无限循环是由此代码创建。
如何在 EF Core 中播种这种类型的数据?
解决方案
我通常不建议每次都创建新的 GUID。此代码在部署到不同的环境(即登台和生产环境)时会生成不同的 ID,因此您只需按名称查询对象,创建 ID 列似乎没用。此外,您还需要为每个实体定义主键。所以如果你硬编码你的GUID会更好
var personId="17FD2873-FF9D-4951-9346-1C71BD0AC0DE";
new Person
{
Id = personId,
Name = "Ridley Scott"
}
推荐阅读
- python - 关于数据可视化的简单python问题
- python - 将 .unpack 从 Python 2.7 翻译到 3.9
- r - 借助映射器将组颜色链接到闪亮
- flutter - 带有 VLC 的实时视频应用程序
- arrays - 3D Array 的内存分配和 C 结果中 fread 的使用
- html - 如何让网站上的按钮从我的电脑播放 mp3 声音?
- python - 全局变量中的可变大小矩阵,python
- javascript - 使相同的 JS 适用于不同的部门元素
- javascript - React : 无效的钩子调用而不更改 React 代码
- python - 如何将镶木地板文件的模式与另一个模式进行比较?并合并任何新列(甚至嵌套)