【发布时间】:2018-03-23 17:39:26
【问题描述】:
我正在使用 dotnet core (2) 和 EF Core 实现 WebAPI。该应用程序使用 UnitOfWork/Repository 模式。我已经到了需要实现“多对多”关系的地步,但我遇到了一些麻烦。这是我到目前为止所得到的:
实体:
public class Team : DataEntity
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int TeamId { get; set; }
public int OrganizationID { get; set; }
public string Name { get; set; }
public string URL { get; set; }
public virtual ICollection<Season> Seasons { get; set; }
public ICollection<TeamMember> TeamMember { get; set; }
}
public class Member : DataEntity
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int MemberId { get; set; }
public string Name { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string MobilePhone { get; set; }
public string Email { get; set; }
public int RelatedTo { get; set; }
public int TeamRole { get; set; }
public ICollection<TeamMember> TeamMember { get; set; }
}
public class TeamMember
{
public int TeamId { get; set; }
public Team Team { get; set; }
public int MemberId { get; set; }
public Member Member { get; set; }
}
在我的 DbContext 类中:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<TeamMember>()
.HasKey(t => new { t.TeamId, t.MemberId });
modelBuilder.Entity<TeamMember>()
.HasOne(tm => tm.Team)
.WithMany(t => t.TeamMember)
.HasForeignKey(tm => tm.TeamId);
modelBuilder.Entity<TeamMember>()
.HasOne(tm => tm.Member)
.WithMany(t => t.TeamMember)
.HasForeignKey(tm => tm.MemberId);
}
在我的存储库中,我对 IncludeAll 进行了扩展:
public static IQueryable<Team> IncludeAll(this IGenericRepository<Team> repository)
{
return repository
.AsQueryable()
.Include(s => s.Seasons)
.Include(tm => tm.TeamMember);
}
一切都按预期构建,但在尝试调用获取团队(我希望包括所有成员)或成员(我希望包括所有成员团队 - 上面未包含代码)的控制器操作时。 SwaggerUI 返回:TypeError:获取失败。如果我尝试直接在 chrome (http://localhost/api/Team/1) 中调用控制器操作,我会得到一个不完整的结果,但绝不会更少......结果:):
{
"value":
{
"teamId":1,
"organizationID":1,
"name":"Team1",
"url":"http://www.team1.com",
"seasons":[
{
"id":1,
"teamID":1,
"name":"PK4",
"description":null,
"startDate":"2017-09-01T00:00:00",
"endDate":"2018-12-31T00:00:00",
"created":"2017-12-01T00:00:00",
"updated":"2017-12-27T00:00:00",
"createdBy":"magnus",
"updatedBy":"magnus"
}],
"teamMember":[
{
"teamId":1
我是否遗漏了一些明显的东西?
【问题讨论】:
-
完成@GertArnold :)
标签: c# entity-framework asp.net-core entity-framework-core asp.net-core-webapi