Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与ID未知的对象相关的种子数据_C#_Asp.net Core_Entity Framework Core - Fatal编程技术网

C# 与ID未知的对象相关的种子数据

C# 与ID未知的对象相关的种子数据,c#,asp.net-core,entity-framework-core,C#,Asp.net Core,Entity Framework Core,我在将数据植入EF Core DB时遇到问题。数据由电影组成,电影中有一个人物对象作为其导演的关系。这种关系的基础是,一部电影应该有一名导演,而DB中的每个导演实体都有一部导演电影(不理想,但除此之外)。当我尝试在数据库中播种初始数据时,问题就出现了。因为我正在播撒电影和导演,所以我无法事先知道实体的ID,我需要能够在创建与之相关的电影之前搜索具有给定名称的导演的上下文 例如: 这是人民(董事)的种子 public void配置(EntityTypeBuilder) { 建造商:可转让(“人”)

我在将数据植入EF Core DB时遇到问题。数据由电影组成,电影中有一个
人物
对象作为其导演的关系。这种关系的基础是,一部电影应该有一名导演,而DB中的每个导演实体都有一部导演电影(不理想,但除此之外)。当我尝试在数据库中播种初始数据时,问题就出现了。因为我正在播撒电影和导演,所以我无法事先知道实体的ID,我需要能够在创建与之相关的电影之前搜索具有给定名称的导演的上下文

例如:

这是人民(董事)的种子

public void配置(EntityTypeBuilder)
{
建造商:可转让(“人”);
builder.Property(p=>p.Id).HasColumnName(“Id”);
builder.HasData(
新人
{
Id=Guid.NewGuid().ToString(),
Name=“Ridley Scott”
}
);
}
这是电影的种子

public void配置(EntityTypeBuilder)
{
使用AtlasDbContext context=new AtlasDbContext();
Person director=context.Persons.FirstOrDefault(p=>p.Id.Equals(“Ridley Scott”);
建筑商。ToTable(“电影”);
builder.Property(m=>m.Id).HasColumnName(“Id”);
builder.HasData(
新电影
{
Title=“火星人”,
Poster=File.ReadAllBytes($“{Environment.CurrentDirectory}\\wwwroot\\img\\themarian.Poster.jpg”),
Cover=File.ReadAllBytes($“{Environment.CurrentDirectory}\\wwwroot\\img\\themarian.Cover.jpg”),
ReleaseYear=“2015”,
副标题=“带他回家”,
UserScore=77,
Overview=“在载人火星任务期间,”+
“据推测,宇航员马克·沃特尼在一场猛烈的风暴后死亡,并被机组人员遗弃。”+
“但沃特尼幸存下来,发现自己被困在这个充满敌意的星球上,孤身一人。”+
“由于供给不足,他必须发挥自己的聪明才智。”+
“以智慧和精神生存,并找到一种方式向地球发出他还活着的信号。”,
DirectorId=director?.Id,
预算=108000000,
收入=63061890,
类型=新列表
{
类型,冒险,
类型,戏剧,
科幻小说
}
}
);
}
DB上下文是在没有依赖注入的情况下实例化的,因为我无法在重写的方法中DI上下文。然而,当我尝试为这个种子创建一个迁移时,迁移成功地完成了构建,但没有创建任何东西,并且终端不可用于输入(卡在“build successed”上),这让我相信这段代码创建了一个无限循环


如何在EF Core中植入这种类型的数据?

我一般不建议每次都创建新的GUID。这段代码在部署到不同的环境(即登台和生产环境)时将生成不同的ID,因此您只需按名称查询对象,而创建ID列似乎毫无用处。此外,您还需要为每个实体定义主键。因此,如果您将GUID硬编码为

var personId="17FD2873-FF9D-4951-9346-1C71BD0AC0DE";
new Person
    {
        Id = personId,
        Name = "Ridley Scott"
    }

如果这个答案对你有帮助,请投票表决