Automapper 和 EF 导航属性
Automapper and EF Navigation Properties
使用 ASP.NET MVC Core 和 Entity Framework Core 我正在尝试创建一个简单的网站。
我已经定义了我的模型:
public class Club
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual IEnumerable<Team> Teams { get; set; }
}
public class Team
{
[Key]
public int Id { get; set; }
public int ClubId { get; set; }
[MaxLength(32)]
public string Name { get; set; }
public virtual Club Club { get; set; }
}
以及相应的视图模型:
public class ClubViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IEnumerable<TeamViewModel> Teams { get; set; }
}
public class TeamViewModel
{
public int Id { get; set; }
public int ClubId { get; set; }
public string Name { get; set; }
public virtual ClubViewModel Club { get; set; }
}
我已经用相应的映射器定义了一个 Automapper 配置文件:
CreateMap<Club, ClubViewModel>();
CreateMap<ClubViewModel, Club>();
CreateMap<Team, TeamViewModel>();
CreateMap<TeamViewModel, Team>();
我尝试加载 Club
实体,其中包含导航 属性 Teams
(_context.Club.Include(c => c.Teams).ToList()
)。这按预期工作,它 returns 一个带有团队列表的俱乐部。但是当我尝试将此实例映射到 ClubViewModel 时,我收到 502.3 错误 并且我的调试会话立即结束。
我好像漏掉了一些琐碎的东西,但我就是没有看到。 Windows 事件日志中没有任何信息,而且我在 IIS Express 日志记录中找不到任何有用的信息 (%userprofile%\documents\IISExpress)
导致崩溃的原因是什么?
您不能执行此映射,因为它是循环的。您必须删除此行
public virtual ClubViewModel Club { get; set; }
来自您的 TeamViewModel
并且映射应该按预期工作。
使用 ASP.NET MVC Core 和 Entity Framework Core 我正在尝试创建一个简单的网站。
我已经定义了我的模型:
public class Club
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual IEnumerable<Team> Teams { get; set; }
}
public class Team
{
[Key]
public int Id { get; set; }
public int ClubId { get; set; }
[MaxLength(32)]
public string Name { get; set; }
public virtual Club Club { get; set; }
}
以及相应的视图模型:
public class ClubViewModel
{
public int Id { get; set; }
public string Name { get; set; }
public virtual IEnumerable<TeamViewModel> Teams { get; set; }
}
public class TeamViewModel
{
public int Id { get; set; }
public int ClubId { get; set; }
public string Name { get; set; }
public virtual ClubViewModel Club { get; set; }
}
我已经用相应的映射器定义了一个 Automapper 配置文件:
CreateMap<Club, ClubViewModel>();
CreateMap<ClubViewModel, Club>();
CreateMap<Team, TeamViewModel>();
CreateMap<TeamViewModel, Team>();
我尝试加载 Club
实体,其中包含导航 属性 Teams
(_context.Club.Include(c => c.Teams).ToList()
)。这按预期工作,它 returns 一个带有团队列表的俱乐部。但是当我尝试将此实例映射到 ClubViewModel 时,我收到 502.3 错误 并且我的调试会话立即结束。
我好像漏掉了一些琐碎的东西,但我就是没有看到。 Windows 事件日志中没有任何信息,而且我在 IIS Express 日志记录中找不到任何有用的信息 (%userprofile%\documents\IISExpress)
导致崩溃的原因是什么?
您不能执行此映射,因为它是循环的。您必须删除此行
public virtual ClubViewModel Club { get; set; }
来自您的 TeamViewModel
并且映射应该按预期工作。