C#Automapper 6.1.1-集合/列表目标属性丢失值实体框架6

C#Automapper 6.1.1-集合/列表目标属性丢失值实体框架6,c#,entity-framework,entity-framework-6,automapper,automapper-6,C#,Entity Framework,Entity Framework 6,Automapper,Automapper 6,我在使用Automapper 6映射集合时遇到问题,无法找到解决方案。在下面的updatedArticle对象中,我创建了映射后剩余的旧值和更新值,因为它们在视图模型中不存在。但是,说明中创建的和更新的的值将丢失。通过视图模型输入的值都已正确更新。我做错了什么?Automapper也会丢失文章的EntityFramework6映射,因为这些值也会丢失 控制器方法: public async Task<IHttpActionResult> UpdateArticle(ArticleVi

我在使用Automapper 6映射集合时遇到问题,无法找到解决方案。在下面的
updatedArticle
对象中,我创建了映射后剩余的
旧值和
更新值,因为它们在视图模型中不存在。但是,说明中创建的
和更新的
的值将丢失。通过视图模型输入的值都已正确更新。我做错了什么?Automapper也会丢失文章的EntityFramework6映射,因为这些值也会丢失

控制器方法:

public async Task<IHttpActionResult> UpdateArticle(ArticleViewModel articleVm)
{
    Article articleOriginal = await iArticleRepository.GetAsync(articleVm.Id);
    Article updatedArticle = Mapper.Map<ArticleViewModel, Article>(articleVm, articleOriginal);
    return Ok();
}
公共异步任务更新篇(ArticleViewModel articleVm)
{
Article articleOriginal=await iArticleRepository.GetAsync(articleVm.Id);
Article updatedArticle=Mapper.Map(articleVm,articleOriginal);
返回Ok();
}
映射:

Mapper.Initialize(cfg =>
{
    cfg.CreateMap<ArticleViewModel, Article>()
        .ForMember(x => x.Created, opt => opt.Ignore())
        .ForMember(x => x.Updated, opt => opt.Ignore());

    cfg.CreateMap<DescriptionViewModel, Description>()
        .ForMember(x => x.Created, opt => opt.Ignore())
        .ForMember(x => x.Updated, opt => opt.Ignore())
        .ForMember(x => x.ArticleId, opt => opt.Ignore())
        .ForMember(x => x.Article, opt => opt.Ignore());
}
Mapper.AssertConfigurationIsValid();
Mapper.Initialize(cfg=>
{
cfg.CreateMap()
.ForMember(x=>x.Created,opt=>opt.Ignore())
.ForMember(x=>x.Updated,opt=>opt.Ignore());
cfg.CreateMap()
.ForMember(x=>x.Created,opt=>opt.Ignore())
.ForMember(x=>x.Updated,opt=>opt.Ignore())
.ForMember(x=>x.ArticleId,opt=>opt.Ignore())
.ForMember(x=>x.Article,opt=>opt.Ignore());
}
assertConfigurationsValid();
视图模型:

public class ArticleViewModel
{
    public int Id { get; set; }

    public string Name { get; set; }

    public List<DescriptionViewModel> Descriptions { get; set; }
}

public class DescriptionViewModel
{
    public int Id { get; set; }

    public string Heading { get; set; }
}
公共类ArticleViewModel
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表描述{get;set;}
}
公共类描述视图模型
{
公共int Id{get;set;}
公共字符串标题{get;set;}
}
型号:

public class Article : IEntity<int>
{
    public Article()
    {
        Descriptions = new List<Description>();
    }

    [Key]
    public int Id { get; set; }

    public DateTime Created { get; set; }

    public DateTime Updated { get; set; }

    [MaxLength(256)]
    public string Name { get; set; }

    public virtual ICollection<Description> Descriptions { get; set; }
}

public class Description: IEntity<int>
{
    [Key]
    public int Id { get; set; }

    public DateTime Created { get; set; }

    public DateTime Updated { get; set; }

    [MaxLength(256)]
    public string Heading { get; set; }

    public int ArticleId { get; set; }

    public virtual Article Article { get; set; }
}
公共类文章:IEntity
{
公共物品()
{
描述=新列表();
}
[关键]
公共int Id{get;set;}
已创建公共日期时间{get;set;}
公共日期时间已更新{get;set;}
[最大长度(256)]
公共字符串名称{get;set;}
公共虚拟ICollection描述{get;set;}
}
公共类说明:IEntity
{
[关键]
公共int Id{get;set;}
已创建公共日期时间{get;set;}
公共日期时间已更新{get;set;}
[最大长度(256)]
公共字符串标题{get;set;}
公共int ArticleId{get;set;}
公共虚拟项目{get;set;}
}

您在没有延迟加载的情况下尝试过这个吗?我自己在EF延迟加载和AutoMapper方面遇到了一些问题。首先,它效率非常低

见相关
.

您在没有延迟加载的情况下尝试过这个吗?我自己在EF延迟加载和AutoMapper方面遇到了一些问题。首先,它效率非常低

见相关
.

经过两天的挫折终于解决了问题。安装了AutoMapper。从

我所要做的全部更改是
cfg.AddCollectionMappers();
EqualityComparison
。示例:

Mapper.Initialize(cfg =>
{
    cfg.AddCollectionMappers();

    cfg.SetGeneratePropertyMaps<GenerateEntityFrameworkPrimaryKeyPropertyMaps<DbContext>>();

    cfg.CreateMap<ArticleViewModel, Article>(MemberList.Source)
        .EqualityComparison((src, dst) => src.Id == dst.Id);

    cfg.CreateMap<DescriptionViewModel, Description>(MemberList.Source)
        .EqualityComparison((src, dst) => src.Id == dst.Id);
}
Mapper.AssertConfigurationIsValid();
Mapper.Initialize(cfg=>
{
cfg.AddCollectionMappers();
SetGeneratePropertyMaps();
CreateMap(MemberList.Source)
.EqualityComparison((src,dst)=>src.Id==dst.Id);
CreateMap(MemberList.Source)
.EqualityComparison((src,dst)=>src.Id==dst.Id);
}
assertConfigurationsValid();

在两天的挫折之后终于解决了这个问题。安装了AutoMapper。从

我所要做的全部更改是
cfg.AddCollectionMappers();
EqualityComparison
。示例:

Mapper.Initialize(cfg =>
{
    cfg.AddCollectionMappers();

    cfg.SetGeneratePropertyMaps<GenerateEntityFrameworkPrimaryKeyPropertyMaps<DbContext>>();

    cfg.CreateMap<ArticleViewModel, Article>(MemberList.Source)
        .EqualityComparison((src, dst) => src.Id == dst.Id);

    cfg.CreateMap<DescriptionViewModel, Description>(MemberList.Source)
        .EqualityComparison((src, dst) => src.Id == dst.Id);
}
Mapper.AssertConfigurationIsValid();
Mapper.Initialize(cfg=>
{
cfg.AddCollectionMappers();
SetGeneratePropertyMaps();
CreateMap(MemberList.Source)
.EqualityComparison((src,dst)=>src.Id==dst.Id);
CreateMap(MemberList.Source)
.EqualityComparison((src,dst)=>src.Id==dst.Id);
}
assertConfigurationsValid();

我也面临同样的问题。我安装了这两个软件包,但使用的是AddCollectionMappers()正在引发错误。它无法识别此错误。它说“IConfiguration”不包含“AddCollectionMappers”的定义。您能帮我解决这个问题吗?哎呀……真是个愚蠢的错误。已将其安装在其他项目中。由于某些原因,当我尝试添加“AddCollectionMappers”时它无法识别。我正在使用Collection v4.0.0和Automapper v7.0.1。我确实在相应的项目中安装了它。我也面临同样的问题。我安装了这两个软件包,但使用的是AddCollectionMappers()正在引发错误。它无法识别此错误。它说“IConfiguration”不包含“AddCollectionMappers”的定义。您能帮我解决这个问题吗?哎呀……真是个愚蠢的错误。已将其安装在其他项目中。由于某些原因,当我尝试添加“AddCollectionMappers”时它不识别它。我正在使用Collection v4.0.0和Automapper v7.0.1。我确实在相应的项目中安装了它。