我面临与此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}}