Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.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# 自动映射问题:递归投影LinqToSql堆栈溢出异常_C#_Linq To Sql_Automapper - Fatal编程技术网

C# 自动映射问题:递归投影LinqToSql堆栈溢出异常

C# 自动映射问题:递归投影LinqToSql堆栈溢出异常,c#,linq-to-sql,automapper,C#,Linq To Sql,Automapper,使用上述LinqToSql实体类并尝试映射到类似命名的DTO对象会引发Stackoverflow异常。我已经读过了,这似乎是CriteriaGroup对象的子/父关系的问题。有人有什么建议吗 用于调用此函数的代码: var mappedDtos = this.configurationRepository .GetAll() .Project() .To

使用上述LinqToSql实体类并尝试映射到类似命名的DTO对象会引发Stackoverflow异常。我已经读过了,这似乎是CriteriaGroup对象的子/父关系的问题。有人有什么建议吗

用于调用此函数的代码:

var mappedDtos = this.configurationRepository
                        .GetAll()
                        .Project()
                        .To<CriteriaGroupDto>();
var mappedDtos=this.configurationRepository
.GetAll()
.Project(项目)
.To();
其中GetAll()是:

public override IQueryable GetAll()
{
返回此.Table.AsQueryable();
}    
我为此创建的映射代码是:

/// <summary>
/// The criteria profile.
/// </summary>
public class CriteriaProfile : Profile
{
    /// <summary>
    /// The configure.
    /// </summary>
    protected override void Configure()
    {
        Mapper.CreateMap<CriteriaGroup, CriteriaGroupDto>()
                .ForMember(dest => dest.Groups, opt => opt.MapFrom(src => src.Children))
                .ForMember(dest => dest.Parent, opt => opt.MapFrom(src => src.Parent))
                .ForMember(dest => dest.Criteria, opt => opt.MapFrom(src => src.CriteriaConfigs));

        Mapper.CreateMap<CriteriaConfig, CriteriaConfigDto>()
            .Include<RatingConfig, CriteriaConfigDto>()
            .Include<CountryConfig, CriteriaConfigDto>()
            .Include<TimescaleConfig, CriteriaConfigDto>()
            .ForMember(dest => dest.DefaultValue, opt => opt.UseValue(default(object)))
            .ForMember(dest => dest.DataType, opt => opt.Ignore())
            .ForMember(dest => dest.ElementId, opt => opt.MapFrom(src => src.Id))
            .ForMember(dest => dest.Options, opt => opt.Ignore());

        Mapper.CreateMap<RatingConfig, CriteriaConfigDto>()
            .ForMember(dest => dest.JoinOperators, opt => opt.MapFrom(src => src.JoinOperators))
            .ForMember(dest => dest.OptionOperators, opt => opt.MapFrom(src => src.Operators));

        Mapper.CreateMap<CountryConfig, CriteriaConfigDto>()
            .ForMember(dest => dest.JoinOperators, opt => opt.MapFrom(src => src.JoinOperators))
            .ForMember(dest => dest.OptionOperators, opt => opt.MapFrom(src => src.Operators));

        Mapper.CreateMap<TimescaleConfig, CriteriaConfigDto>()
            .ForMember(dest => dest.JoinOperators, opt => opt.MapFrom(src => src.JoinOperators))
            .ForMember(dest => dest.OptionOperators, opt => opt.MapFrom(src => src.Operators));

        base.Configure();
    }
}
//
///标准配置文件。
/// 
公共类标准配置文件:配置文件
{
/// 
///配置。
/// 
受保护的覆盖无效配置()
{
Mapper.CreateMap()
.ForMember(dest=>dest.Groups,opt=>opt.MapFrom(src=>src.Children))
.FormMember(dest=>dest.Parent,opt=>opt.MapFrom(src=>src.Parent))
.ForMember(dest=>dest.Criteria,opt=>opt.MapFrom(src=>src.CriteriaConfigs));
Mapper.CreateMap()
.包括()
.包括()
.包括()
.FormMember(dest=>dest.DefaultValue,opt=>opt.UseValue(默认(对象)))
.FormMember(dest=>dest.DataType,opt=>opt.Ignore())
.ForMember(dest=>dest.ElementId,opt=>opt.MapFrom(src=>src.Id))
.ForMember(dest=>dest.Options,opt=>opt.Ignore());
Mapper.CreateMap()
.FormMember(dest=>dest.JoinOperators,opt=>opt.MapFrom(src=>src.JoinOperators))
.ForMember(dest=>dest.OptionOperators,opt=>opt.MapFrom(src=>src.Operators));
Mapper.CreateMap()
.FormMember(dest=>dest.JoinOperators,opt=>opt.MapFrom(src=>src.JoinOperators))
.ForMember(dest=>dest.OptionOperators,opt=>opt.MapFrom(src=>src.Operators));
Mapper.CreateMap()
.FormMember(dest=>dest.JoinOperators,opt=>opt.MapFrom(src=>src.JoinOperators))
.ForMember(dest=>dest.OptionOperators,opt=>opt.MapFrom(src=>src.Operators));
base.Configure();
}
}
其中,驱动类中的额外映射是由于:(例如)

//
///评级配置。
/// 
公共部分类RatingConfig
{
/// 
///获取运算符。
/// 
公共IEnumerable运算符
{
得到
{
返回枚举.GetAll();
}
}
/// 
///获取联接运算符。
/// 
公共IEnumerable联合运算符
{
得到
{
返回枚举.GetAll();
}
}
}

您试图检索多少数据库行?哦,实际上不多。想想测试数据中有几百条记录。您是否尝试过这样做。configurationRepository.GetAll().ToList().Project().To();在数据中,您可能至少有一条记录,其中ParentCriteriaGroupId等于导致异常的CriteriaGroup表上的Id
/// <summary>
/// The criteria profile.
/// </summary>
public class CriteriaProfile : Profile
{
    /// <summary>
    /// The configure.
    /// </summary>
    protected override void Configure()
    {
        Mapper.CreateMap<CriteriaGroup, CriteriaGroupDto>()
                .ForMember(dest => dest.Groups, opt => opt.MapFrom(src => src.Children))
                .ForMember(dest => dest.Parent, opt => opt.MapFrom(src => src.Parent))
                .ForMember(dest => dest.Criteria, opt => opt.MapFrom(src => src.CriteriaConfigs));

        Mapper.CreateMap<CriteriaConfig, CriteriaConfigDto>()
            .Include<RatingConfig, CriteriaConfigDto>()
            .Include<CountryConfig, CriteriaConfigDto>()
            .Include<TimescaleConfig, CriteriaConfigDto>()
            .ForMember(dest => dest.DefaultValue, opt => opt.UseValue(default(object)))
            .ForMember(dest => dest.DataType, opt => opt.Ignore())
            .ForMember(dest => dest.ElementId, opt => opt.MapFrom(src => src.Id))
            .ForMember(dest => dest.Options, opt => opt.Ignore());

        Mapper.CreateMap<RatingConfig, CriteriaConfigDto>()
            .ForMember(dest => dest.JoinOperators, opt => opt.MapFrom(src => src.JoinOperators))
            .ForMember(dest => dest.OptionOperators, opt => opt.MapFrom(src => src.Operators));

        Mapper.CreateMap<CountryConfig, CriteriaConfigDto>()
            .ForMember(dest => dest.JoinOperators, opt => opt.MapFrom(src => src.JoinOperators))
            .ForMember(dest => dest.OptionOperators, opt => opt.MapFrom(src => src.Operators));

        Mapper.CreateMap<TimescaleConfig, CriteriaConfigDto>()
            .ForMember(dest => dest.JoinOperators, opt => opt.MapFrom(src => src.JoinOperators))
            .ForMember(dest => dest.OptionOperators, opt => opt.MapFrom(src => src.Operators));

        base.Configure();
    }
}
/// <summary>
/// The rating config.
/// </summary>
public partial class RatingConfig
{
    /// <summary>
    /// Gets the operators.
    /// </summary>
    public IEnumerable<RatingOperator> Operators
    {
        get
        {
            return Enumeration.GetAll<RatingOperator>();
        }
    }

    /// <summary>
    /// Gets the join operators.
    /// </summary>
    public IEnumerable<RuleJoinOperator> JoinOperators
    {
        get
        {
            return Enumeration.GetAll<RuleJoinOperator>();
        }
    }
}