Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Automapper自定义地图使用“;包括「;让孩子们有价值_C#_Linq_Asp.net Core_Automapper - Fatal编程技术网

C# Automapper自定义地图使用“;包括「;让孩子们有价值

C# Automapper自定义地图使用“;包括「;让孩子们有价值,c#,linq,asp.net-core,automapper,C#,Linq,Asp.net Core,Automapper,我有一个asp net核心2.1项目。 数据库上下文是用EF创建的。 这是我的SecGroups和SecGroupRights数据库模型: public partial class SecGroups { public SecGroups() { SecGroupRights = new HashSet<SecGroupRights>(); } public long Id { get; set; } public strin

我有一个asp net核心2.1项目。 数据库上下文是用EF创建的。 这是我的SecGroups和SecGroupRights数据库模型:

public partial class SecGroups
{
    public SecGroups()
    {
        SecGroupRights = new HashSet<SecGroupRights>();
    }

    public long Id { get; set; }
    public string Name { get; set; }
    public bool? IsReference { get; set; }
    public long? Provider { get; set; }
    public long? Class { get; set; }

    public SecGroups IdNavigation { get; set; }
    public SecGroups InverseIdNavigation { get; set; }
    public ICollection<SecGroupRights> SecGroupRights { get; set; }
}
这只是SecGroups和SecGroupRights之间简单的一对多关系

如果我通过
\u context
获取SecGroups,例如
var grDB=\u context.SecGroups.FirstOrDefault()我始终拥有
grDB.SecGroupRights
null(即使它有子项)

我发现我必须使用“包含”来获得它,以便获得孩子们:

var grDB = await _context.SecGroups.Include(a => a.SecGroupRights)
.Where(a => a.Id == myID)
.FirstOrDefaultAsync();
这非常有效,我可以访问SecGroupRights数据并最终获得它们的计数

现在,下一件事是制作一个从
SecGroups
到这个组的自定义自动映射:

public class GroupsDto
{
    public long? Id { get; set; }
    public string Name { get; set; }
    public long? Provider { get; set; }
    public long? Rights { get; set; }
}
所以在权利领域,我只想知道孩子们的数量。在我的上述场景中,这将是:

grDB.SecGroupRights.Count();
我尝试这样做映射:

        CreateMap<SecGroups, GroupsDto>(MemberList.Source)
            .ForMember(d => d.Rights, opt => opt.MapFrom(src => src.SecGroupRights.Count()));
我这样称呼它:

var res= _context.SecGroups.Include(a => a.SecGroupRights).ToList();
var mapped = _mapper.Map<List<SecGroups>, List<GroupsDto>>(res);
var res= _context.SecGroups.Include(a => a.SecGroupRights).ToList();
var mapped = _mapper.Map<List<SecGroups>, List<GroupsDto>>(res);
var res=\u context.SecGroups.Include(a=>a.SecGroupRights.ToList();
var-mapped=\u mapper.Map(res);

映射不起作用,因为当我使用映射器时,我在源代码中没有SecGroupRights

因此,作为参考,良好的映射是:

CreateMap<SecGroups, GroupsDto>(MemberList.Source)
.ForMember(d => d.Rights, opt => opt.MapFrom(src => src.SecGroupRights.Count()));
CreateMap<SecGroups, GroupsDto>(MemberList.Source)
.ForMember(d => d.Rights, opt => opt.MapFrom(src => src.SecGroupRights.Count()));
CreateMap(MemberList.Source)
.ForMember(d=>d.Rights,opt=>opt.MapFrom(src=>src.SecGroupRights.Count());
我这样称呼它:

var res= _context.SecGroups.Include(a => a.SecGroupRights).ToList();
var mapped = _mapper.Map<List<SecGroups>, List<GroupsDto>>(res);
var res= _context.SecGroups.Include(a => a.SecGroupRights).ToList();
var mapped = _mapper.Map<List<SecGroups>, List<GroupsDto>>(res);
var res=\u context.SecGroups.Include(a=>a.SecGroupRights.ToList();
var-mapped=\u mapper.Map(res);

尝试检查MemberList中的list SecGroupRights。Source在创建映射之前包含数据。实际上,我的缺点是我没有在要映射的对象的源中包含SecGroupRights!玩得好,我的朋友:)这就是当你同时使用大量新技术,同时需要完成工作时会发生的情况D