【问题标题】:Automapper and EF Navigation PropertiesAutomapper 和 EF 导航属性
【发布时间】:2017-03-24 14:45:14
【问题描述】:

我正在尝试使用 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 =&gt; c.Teams).ToList())。这按预期工作,它返回一个带有团队列表的俱乐部。但是当我尝试将此实例映射到 ClubViewModel 时,我收到 502.3 错误,并且我的调试会话立即结束。

似乎我遗漏了一些微不足道的东西,但我根本看不到它。 Windows 事件日志中没有任何信息,我在 IIS Express 日志中找不到任何有用的信息 (%userprofile%\documents\IISExpress)

导致崩溃的原因是什么?

【问题讨论】:

  • 这行_context.Club.Include(c =&gt; c.Teams).ToList()和Automapper无关,把这行放在try/catch语句里面看看有什么异常。
  • 该行返回一个填充了 Teams 属性的 Club 实例。当我尝试使用 IMapper.Map(club_instance); 将实例映射到 ClubViewModel 实例时;没有捕获到异常,调试会话就结束了
  • 听起来像circular reference问题。

标签: asp.net-core asp.net-core-mvc entity-framework-core automapper-6


【解决方案1】:

您无法执行此映射,因为它是循环的。您必须删除此行

public virtual ClubViewModel Club { get; set; }

来自您的 TeamViewModel,映射应该按预期工作。

【讨论】:

  • 你是对的。删除该属性确实有效。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-09-21
  • 2020-01-01
  • 2016-07-19
  • 2023-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多