entity-framework - 我无法从与我的 ViewModel 的多对多关系中检索数据
问题描述
我有一个与多对多关系中的Map
表相关的表。Day
因此,我MapDay
根据 EF 文档创建了该表。
从多到多不相关的表,我返回没有问题......
这是我的控制器,我正在使用视图模型......
[HttpGet("getmaps")]
public async Task<ActionResult<IEnumerable<MapViewModel>>> GetMap()
{
var maps = _mapper.Map<IEnumerable<MapViewModel>>(await _mapRepository.GetMaps());
if(maps.Count() > 0) return Ok(maps);
return NotFound();
}
这是我的 MapViewModel:
public class MapViewModel : MainViewModel
{
public Guid UserId { get; set; }
public double Lng { get; set; }
public double Lat { get; set; }
public AddressViewModel Address { get; set; }
/* EF Relations */
public ItemMapViewModel ItemMap { get; set; }
public IEnumerable<MapDayViewModel> MapDay { get; set; } //testing
public IEnumerable<DayViewModel> Day { get; set; } // need this?
}
我的存储库带有查询:
public async Task<IEnumerable<Map>> GetMaps()
{
return await Db.Maps.AsNoTracking()
.Include(i => i.Address)
.Include(it => it.ItemMap)
.Include(mp => mp.MapDay).ThenInclude(mp => mp.Day)
.ToListAsync();
}
这是我的结果 JSON:
[
{
"userId": "705cbdaf-86e9-4759-8f85-4fa6f3560726",
"lng": 0.0,
"lat": 0.0,
"address": {
"street": "st 123",
"number": "12",
"apt": "34",
"area": "AreaT",
"zip": "123456789",
"city": "Belo ",
"state": "ST",
"id": "ba3e7a68-63eb-4383-b980-14dea9615072"
},
"itemMap": {
"id": "353ccb80-b9fd-4469-9270-6a399ad37201",
"item": "Item1"
},
"mapDay": [
{
"mapId": "719da65c-42c9-4954-a750-e0b90e82461e",
"dayId": "5b444e8e-642f-4175-9329-9ef4a0f7aa87"
}
],
"day": null,
"id": "719da65c-42c9-4954-a750-e0b90e82461e"
}
]
使用aspnet core 3.1 那么,我该怎么做才能返回这张地图的天数呢?
解决方案
使用aspnet core 3.1 那么,我该怎么做才能返回这张地图的天数呢?
如果要Day
在 type 的返回结果中包含数据IEnumerable<MapViewModel>
,确实需要public IEnumerable<DayViewModel> Day {get; set;}
添加MapViewModel
.
由于您没有提供您的自动映射器代码,我将根据您提供的代码完成您的要求。
这里我将你的模型简化如下:</p>
楷模:
public class Map
{
public int MapId { get; set; }
public string MapName { get; set; }
public ICollection<MapDay> MapDay { get; set; }
}
public class Day
{
public int DayId { get; set; }
public string DayName { get; set; }
public ICollection<MapDay> MapDay { get; set; }
}
public class MapDay
{
public int MapId { get; set; }
public Map Map { get; set; }
public int DayId { get; set; }
public Day Day { get; set; }
}
视图模型:
public class MapViewModel
{
public int MapId { get; set; }
public string MapName { get; set; }
public IEnumerable<MapDayViewModel> MapDay { get; set; } //testing
public IEnumerable<DayViewModel> Day { get; set; } // need this?
}
public class DayViewModel
{
public int DayId { get; set; }
public string DayName { get; set; }
}
public class MapDayViewModel
{
public int MapId { get; set; }
public int DayId { get; set; }
}
这是将数据从模型转换为视图模型的详细 Automapper 代码:
[HttpGet("getmaps")]
public async Task<ActionResult<IEnumerable<MapViewModel>>> GetMap()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Map, MapViewModel>()
.ForMember(dest => dest.MapId, opt => opt.MapFrom(s => s.MapId))
.ForMember(dest => dest.MapName, opt => opt.MapFrom(s => s.MapName))
.ForMember(x => x.MapDay, opt => opt.MapFrom(model => model.MapDay))
.ForMember(x => x.Day, opt => opt.MapFrom(model => model.MapDay.Select(x => x.Day)));
cfg.CreateMap<MapDay, MapDayViewModel>()
.ForMember(dest => dest.MapId, opt => opt.MapFrom(src => src.MapId))
.ForMember(dest => dest.DayId, opt => opt.MapFrom(src => src.DayId));
cfg.CreateMap<Day, DayViewModel>()
.ForMember(dest => dest.DayId, opt => opt.MapFrom(src => src.DayId))
.ForMember(dest => dest.DayName, opt => opt.MapFrom(src => src.DayName));
});
IMapper _mapper = config.CreateMapper();
var maps = _mapper.Map<IEnumerable<MapViewModel>>(await _mapRepository.GetMaps());
if (maps.Count() > 0)
return Ok(maps);
return NotFound();
}
这是测试结果:
推荐阅读
- r - 我需要在等于 1 的两个日期之间创建一个虚拟变量
- python - 在pygame中绘制多个圆圈的最快方法是什么?
- google-cloud-platform - 使用合并功能将数据从统计表加载到 BigQuery DWH 中的维度和事实是否正确?
- postgresql - 在 postgresql 中制作动态自定义系列(尽可能避免循环)
- c# - 是否可以将子字符串与 OfType 一起使用
? - javascript - 在同一终端上运行的 VScode 实时共享
- vue.js - 如何在任何纵横比下实现相同的外观/设计?
- asp.net-core-3.1 - 模型的 Entity Framework Core 搜索字符串
- android - 在 Espresso 测试中使用 Firebase ScreenShotter 时如何更好地控制屏幕截图名称?
- python - 列表重复N次python的组合