除非重置FK实体,否则EF Core仅返回列表的第一个记录

时间:2016-11-05 17:54:33

标签: c# entity-framework entity-framework-core .net-core

我面临与此question中描述的相同的问题。

问题:我的方法return Ok(tripListVm)正确返回数据库中的所有会议,但是当我从控制器public class Conference { public int Id { get; set; } [Required] [MaxLength(50)] public string Name { get; set; } public ICollection<Venue> Venues { get; set; } public int? LocationId { get; set; } public Location Location { get; set; } } public class Venue { public int Id { get; set; } [Required] [MaxLength(50)] public string Name { get; set; } public int? ConferenceId { get; set; } public Trip Conference { get; set; } public int? LocationId { get; set; } public City City { get; set; } } public class City { public int Id { get; set; } [Required] [MaxLength(50)] public string Name { get; set; } public ICollection<Conference> Conferences { get; set; } public ICollection<Venue> Venues { get; set; } } 将结果返回给视图时inly将第一个集合项返回给客户端。
在otehr方面,通过将所有FK引用设置为null(如上面的SO问题中所指出的),我可以正确地将所有实体返回给客户端,但是在我看来这不是正确的方法。

编辑:解决方案比我简单得多。在下面的代码中(我保留原始形式供其他人查看)我没有将ViewModel中的FK实体映射到Dto对象,而是返回模型实体本身。这就是为什么我需要将这些内部引用置空以使其工作的原因。
通过返回所有Dtos对象,它可以正常工作。



我有三个涉及一对多关系的实体:

 public IEnumerable<Conference> GetAllConferences()
 {   
    return _context.Conferences
                   .Include(t => t.Venues)
                   .Include(t => t.City)
                   .ToList();
 }

在存储库中,我有一个返回会议和相关实体(城市和场地)的方法:

 var conferences = _repository.GetAllConferences();
 if (conferences.Any())
 {
    var conferenceListVm = trips.ToConferenceVmList();

    //Without setting the FK references to null, I can return only the first result of the collection

    foreach (var vm in conferenceListVm)
    {
       foreach (var pm in vm.PoinOfInterests)
       {
          pm.Trip = null;
       }

       vm.Location.Conferences = null;
       vm.Location.Venues = null;
    }

  return Ok(conferenceListVm);
}

public static ConferenceViewModel ToConferenceVm(this Conference conference)
{
   var confVm = new ConferenceViewModel();
   confVm.Name = conference.Name;

   confVm.City = conference.City; 
   confVm.Venues = conference.Venues;

   return tripVm;
}

public static IEnumerable<ConferenceViewModel> ToConferenceVmList(this IEnumerable<Conference> conferences)
{
   return conferences.Select(c => c.ToConferenceVm()).ToList();
}

在控制器中,我需要使用以下代码返回所有结果:

{{1}}

0 个答案:

没有答案