Использование AutoMapper 5, и я был уверен, что я устанавливал это правильно, но я все еще получаю исключение EF:AutoMapper - ConstructProjectionUsing исключение
'Only parameterless constructors and initializers are supported in LINQ to Entities.'
StackTrace:
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MemberInitTranslator.TypedTranslate(ExpressionConverter parent, MemberInitExpression linq)
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TypedTranslator`1.Translate(ExpressionConverter parent, Expression linq)
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateExpression(Expression linq)
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input)
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.TranslateLambda(LambdaExpression lambda, DbExpression input, DbExpressionBinding& binding)
at System.Data.Entity.Core.Objects.ELinq.ExpressionConverter.MethodCallTranslator.OneLambdaTranslator.Translate(ExpressionConverter parent, MethodCallExpression call, DbExpression& source, DbExpressionBinding& sourceBinding, DbExpression& lambda)
Я смотрел вокруг увидел, что исправление было реализовано для ошибки с этим методом в 4.1.0+, но я проверял, что использую 5.0.0 и вижу подобное поведение в описанной здесь проблеме: https://github.com/AutoMapper/AutoMapper/issues/909
Мои данные объекты просты:
Character.cs:
public class Character : BaseModel
{
public string Name {get;set;}
public string Style { get; set; }
public string MainImageUrl { get; set; }
public string ThumbnailUrl { get; set; }
public string Description { get; set; }
public string ColorTheme { get; set; }
public string Name { get; set; }
public int Id { get; set; }
}
CharacterDto.cs:
public class CharacterDto
{
public string Name { get; }
public CharacterDto(string name)
{
Name = name;
}
}
Это веб-Апи и я конфигурирование моего отображения в Ввод в эксплуатацию:
Mapper.Initialize(cfg => cfg.CreateMap<Character, CharacterDto>()
.ConstructProjectionUsing(c => new CharacterDto(c.Name)));
Я использую EF 6 и возвращение в IQueryable<CharacterDto>
:
[Route("characters")]
public IQueryable<CharacterDto> GetCharacters()
{
return Db.Characters.ProjectTo<CharacterDto>();
}
Данные символы в моем контексте IDbSet<Character>
.
Скорее всего, я пропустил что-то простое, но я не могу понять, что это такое.
попробуйте сделать это как и вернуть мне обратную связь: new CharacterDto() {Name = c.Name} // Добавить конструктор по умолчанию в вашем CharacterDto –
@BassamAlugili CharacterDto.Name - только для чтения. Мое понимание заключалось в том, что .ConstuctProjectionUsing допускает использование конструкторов, отличных от по умолчанию. – Jordan