【发布时间】:2018-12-16 17:08:50
【问题描述】:
我有一堂电影课
public class Movie
{
public int Id { get; set; }
public string Name { get; set; }
public Producer ProducerName { get; set; }
}
还有一个类Producer
public class Producer
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Movie> Movies { get; set; }
}
他们从制片人到电影是一对多的关系,即制片人可以有多部电影,而一部电影只有一个制片人。
我正在通过以下查询获取电影详细信息。
var result = _context.Movies
.Include(m => m.ProducerName)
.ToList();
我低于 Json:
{
"id": 1,
"name": "Venom",
"producerName": {
"id": 2,
"name": "Amy Pascal",
"movies": [
{
"id": 1,
"name": "Venom"
}
]
}
}
我想要在同一个查询中与制片人关联的所有电影?
喜欢
{
"id": 1,
"name": "Venom",
"producerName": {
"id": 2,
"name": "Amy Pascal",
"movies": [
{
"id": 1,
"name": "Venom"
},
{
"id": 56,
"name": "something"
},
{
"id": 81,
"name": "else"
}
]
}
}
我该怎么做?
编辑:使用其中一个答案中的查询,我只收到制片人的一部电影(当前电影),而不是全部。 我查看了数据库,发现即使从制片人到电影是一对多的关系,也为同一个制片人插入了多行(具有不同的主键)。我的问题在这里有点不同。我正在使用 json 播种数据库。 IDs(PK) 是数据库生成的。
用于为数据库播种的 JSON:
[
{
"Name": "Venom",
"ProducerName":
{
"Name": "Steven Spielberg"
}
},
{
"Name": "Kung Fu League",
"ProducerName":
{
"Name": "Steven Spielberg"
}
}
]
如何限制 EF Core 不为同一制片人创建重复行,也不为同一制片人生成不同的密钥,因为这样我可能会成功接收单个制片人的所有电影?
【问题讨论】:
-
您是否想要制作人在每部电影下的完整电影列表?为此,您需要从制片人 Id 再次调用电影。您也许可以将其添加为子 Include 或 Select 但我尚未检查。
-
var result = _context.Producers.Include(p => p.Movies).ToList(); -
没有。我想获取电影列表,包括电影的制片人,并在同一个调用中获取“制片人制作的所有电影”。我们在多对多的关系中得到了这一点。但这是一对多的关系。获得嵌套调用有点混乱。
-
你让我感兴趣,尝试一下 :)
标签: c# entity-framework entity-framework-core