调用AutoMapper的Persist()。InsertOrUpdate()

时间:2019-04-10 02:11:56

标签: automapper ef-core-2.1

我有一个带有默认构造函数的简单对象。我要映射到的对象和从它们映射的对象都完全相同,并且已经为它们配置了一个映射器。从数据库获取对象一切正常。

public class Tag
{
    public Guid ProjectId { get; set; }
    public Guid TagId { get; set; }
    public string Name { get; set; }
}

如果我致电Mapper.Instance.Map(tagFrom, tagTo);,一切正常,但是如果我致电dbContext.Tags.Persist().InsertOrUpdate(tag);,则会出现此错误。

  

找到未映射的成员。在下面查看类型和成员。   添加自定义映射表达式,忽略,添加自定义解析器或修改源/目标类型   对于没有匹配的构造函数,请添加一个无参数ctor,添加可选参数,或映射所有构造函数参数

     

AutoMapper为您创建了此类型映射,但是无法使用当前配置来映射您的类型。

     

AutoMapper为您创建了此类型映射,但是无法使用当前配置来映射您的类型。   标签->表达式1 (Destination member list) AKS.Common.Models.Tag -> System.Linq.Expressions.Expression 1 [[System.Func`2 [[AKS.AppCore.Entities.Tag,AKS.AppCore,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null],[System.Boolean ,System.Private.CoreLib,版本= 4.0.0.0,文化=中性,PublicKeyToken = 7cec85d7bea7798e]],System.Private.CoreLib,版本= 4.0.0.0,文化=中性,PublicKeyToken = 7cec85d7bea7798e]](目标成员列表)< / p>      

未映射的属性:

     

参数

     

没有可用的构造函数。

似乎是在说我没有默认构造函数,但显然有一个。有人知道我在做什么错吗?

软件包版本: AutoMapper 8.0.0 AutoMapper.Collections 5.0.0 AutoMapper.Collections.EntityFrameworkCore 0.2.0

1 个答案:

答案 0 :(得分:0)

这可能是AutoMapper.Collections.EntityFrameworkCore中的错误,或者可能是由于我自己的滥用引起的。

我正在使用以下代码配置Mapper

var cfg = new MapperConfigurationExpression();

cfg.AddCollectionMappers();
cfg.UseEntityFrameworkCoreModel<MyDbContext>();

cfg.CreateMap<TagDto, TagEntity>().ReverseMap();

然后我试图在初始化映射器之前用此代码验证映射配置。

var config = new MapperConfiguration(cfg);
config.AssertConfigurationIsValid();

Mapper.Initialize(cfg);

如果删除创建MapperConfiguration的行并将其用于AssertConfigurationIsValid(),则调用InsertOrUpdate()的工作。

我还发现,如果我首先初始化映射器,则可以调用AssertConfigurationIsValid(),然后在Mapper.Instance上调用该方法

Mapper.Initialize(cfg);
Mapper.Configuration.AssertConfigurationIsValid();