Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/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# “自动制版机返回”;“违约”;映射实体的实例_C#_Entity Framework_Automapper - Fatal编程技术网

C# “自动制版机返回”;“违约”;映射实体的实例

C# “自动制版机返回”;“违约”;映射实体的实例,c#,entity-framework,automapper,C#,Entity Framework,Automapper,我试图让automapper为.NETCore工作,但我似乎遗漏了一些重要的东西 我的automapper设置如下: 在我的ConfigureServices方法的Startup.cs中,我有以下行: services.AddAutoMapper(typeof(Startup), typeof(ApplicationDbContext)); 我还有一个名为MappingProfile的类,类似于: public class MappingProfile : Profile { publ

我试图让automapper为.NETCore工作,但我似乎遗漏了一些重要的东西

我的automapper设置如下:

在我的
ConfigureServices
方法的
Startup.cs
中,我有以下行:

services.AddAutoMapper(typeof(Startup), typeof(ApplicationDbContext));
我还有一个名为
MappingProfile
的类,类似于:

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<CfGroup, GroupModel>()
            .IgnoreAllUnmapped();
        CreateMap<GroupModel, CfGroup>()
            .IgnoreAllUnmapped();
        ...
    }
}
我的CFG组如下所示:

    public static IMappingExpression<TSource, TDest> IgnoreAllUnmapped<TSource, TDest>(
        this IMappingExpression<TSource, TDest> expression)
    {
        expression.ForAllMembers(opt => opt.Ignore());
        return expression;
    }
[Table("Groups")]
public class CfGroup
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [StringLength(100)]
    [Required]
    public string Name { get; set; }

    [DataType(DataType.ImageUrl)]
    [StringLength(250)]
    public string ImageUrl { get; set; }

    [Required]
    public int FounderId { get; set; }

    [ForeignKey("FounderId")]
    public virtual CfUser Founder { get; set; }

    [Required]
    public bool IsActive { get; set; }

    [Required]
    public DateTime CreatedTimestampUtc { get; set; }

    [StringLength(3000)]
    public string About { get; set; }

    public virtual ISet<UserGroupMember> Members { get; set; }

    public virtual ISet<UserGroupManager> Managers { get; set; }
}
public class GroupModel
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string ImageUrl { get; set; }

    public string About { get; set; }
}
var dtos = _mapper.Map<IEnumerable<GroupModel>>(entities.ToList());
调用web api端点时,我从数据库中获得了一组
CfGroup
实体。然后运行如下命令:

var dtos = entities.Select(_mapper.Map<GroupModel>);
并且,假设这是一个
IEnumerable
问题,尝试从中创建一个
列表

var dtos = entities.Select(x => _mapper.Map<GroupModel>(x)).ToList();
var dtos=entities.Select(x=>_mapper.Map(x)).ToList();
…但无论如何,DTO仍保持实例化状态,但所有属性都设置为其默认值


我做错了什么?

我怀疑这可能是因为您在linq表达式内部映射。试着这样做:

    public static IMappingExpression<TSource, TDest> IgnoreAllUnmapped<TSource, TDest>(
        this IMappingExpression<TSource, TDest> expression)
    {
        expression.ForAllMembers(opt => opt.Ignore());
        return expression;
    }
[Table("Groups")]
public class CfGroup
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [StringLength(100)]
    [Required]
    public string Name { get; set; }

    [DataType(DataType.ImageUrl)]
    [StringLength(250)]
    public string ImageUrl { get; set; }

    [Required]
    public int FounderId { get; set; }

    [ForeignKey("FounderId")]
    public virtual CfUser Founder { get; set; }

    [Required]
    public bool IsActive { get; set; }

    [Required]
    public DateTime CreatedTimestampUtc { get; set; }

    [StringLength(3000)]
    public string About { get; set; }

    public virtual ISet<UserGroupMember> Members { get; set; }

    public virtual ISet<UserGroupManager> Managers { get; set; }
}
public class GroupModel
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string ImageUrl { get; set; }

    public string About { get; set; }
}
var dtos = _mapper.Map<IEnumerable<GroupModel>>(entities.ToList());
var dtos=\u mapper.Map(entities.ToList());

因此,原来
忽略allunmapped
不是正确的方法;事实上,如果没有它,映射似乎可以正常工作。我取出了额外的“异常处理”代码,它按照我的要求工作。我想得太多了。

你说得对。除非您使用
ProjectTo()
AutoMapper方法,否则任何人都不应该在所有实体返回之前进行映射。我认为
IgnoreAllUnmapped
扩展方法不是您想要的。基本上你说的是所有成员的ingore映射。试着不用它?嗯。。。看来你是对的。但是,如果我没有,我的
ConfigurationProvider.assertConfigurationsvalid()
测试将失败,属性未映射。。。这就是
IgnoreAllUnmapped
应该解决的问题。。。仅当您手动重新映射扩展方法时(在调用
.IgnoreAllUnmapped()之后),该扩展方法才起作用
,这是相当多的工作。看起来是这样的。所以,我可以用简单的方法来做,放弃验证测试,或者用困难的方法…这不是一个困难的选择。谢谢!啊,如果你想做验证测试,有一种方法可以解决这个问题,用
成员列表配置你的映射。没有
成员列表。Source
不记得是什么了我在我的头顶上。因此它将是
CreateMap(MemberList.None)
或另一个。有关更多信息,请参阅。