«Нет доступного конструктора» при вызове функции Persist () AutoMapper. InsertOrUpdate () - PullRequest
1 голос
/ 10 апреля 2019

У меня есть простой объект с конструктором по умолчанию. Объекты, которые я отображаю и определяю, определены одинаково, и я настроил для них средство отображения. Все отлично работает, получая объект из базы данных.

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 создал эту карту типов для вас, но ваши типы не могут быть сопоставлены с использованием текущей конфигурации. Tag -> Expression 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 = нейтральный, PublicKeyToken = null], [System.Boolean, System .Private.CoreLib, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e]], System.Private.CoreLib, Версия = 4.0.0.0, Культура = нейтральная, PublicKeyToken = 7cec85d7bea7798e]] (список участников назначения)

Несопоставленные свойства:

Параметры

Нет доступного конструктора.

Похоже, он говорит, что у меня нет конструктора по умолчанию, но, очевидно, он есть. Кто-нибудь знает, что я делаю не так?

Версии пакета: AutoMapper 8.0.0 AutoMapper.Collections 5.0.0 AutoMapper.Collections.EntityFrameworkCore 0.2.0

1 Ответ

1 голос
/ 12 апреля 2019

Это может быть ошибка в 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();
...