Как использовать AutoMapper для фильтрации столбцов перед выполнением на SQL Server - PullRequest
0 голосов
/ 05 июня 2018

Я хочу использовать AutoMapper для сопоставления моих сущностей с объектом DTO.я хочу отфильтровать мой столбец и затем выполнить их для базы данных, но он получит все Cols и затем отобразит:

 AutoMapper.Mapper.Initialize(cfg => {
     cfg.CreateMap<User, UserDTO>();
     /* etc */
 });

 ShamsEntities Entities = new ShamsEntities();

 var Res = Entities.Users.AsEnumerable().Select(role => Mapper.Map<User, UserDTO>(role)).ToList();

Вот мой UserDTO:

 class UserDTO
 {
     public string FirstName { get; set; }
     public string LastName { get; set; }
     public string Email { get; set; }
     public string UserName { get; set; }
     public string Password { get; set; }

 }

И здесьмой запрос SELECT:

 SELECT [Extent1].[ID] AS[ID],
 [Extent1].[FirstName] AS [FirstName], 
 [Extent1].[LastName] AS [LastName], 
 [Extent1].[Email] AS [Email], 
 [Extent1].[UserName] AS [UserName], 
 [Extent1].[Password] AS [Password], 
 [Extent1].[DiskUsed] AS [DiskUsed], 
 [Extent1].[DiskUsage] AS [DiskUsage], 
 [Extent1].[Status] AS [Status], 
 [Extent1].[Telephone] AS [Telephone], 
 [Extent1].[Mobile] AS [Mobile], 
 [Extent1].[Skype] AS [Skype], 
 [Extent1].[IM] AS [IM], 
 [Extent1].[GoogleUserName] AS [GoogleUserName], 
 [Extent1].[CompanyName] AS [CompanyName], 
 [Extent1].[CompanyAddress] AS [CompanyAddress], 
 [Extent1].[CompanyTelephone] AS [CompanyTelephone], 
 [Extent1].[CompanyFax] AS [CompanyFax], 
 [Extent1].[CompanyEmail] AS [CompanyEmail], 
 [Extent1].[Tets] AS [Tets] ...  

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Если вы хотите отобразить (используя AutoMapper) и просто получить нужные столбцы из вашей базы данных, вам следует установить также AutoMapper.EF6

Install-Package AutoMapper.EF6

Тогда вместо:

var Res = Entities.Users.AsEnumerable().Select(role => Mapper.Map<User, UserDTO>(role)).ToList();

Используйте новый метод расширения ProjectTo, как показано ниже:

var Res = Entities.Users.ProjectTo<UserDTO>().ToList();

Обратите внимание, что вам не нужно звонить AsEnumerable() и не нужно использовать Select(), которыйзаменяется на ProjectTo().

Подробнее об этом здесь .

0 голосов
/ 05 июня 2018

Вы можете использовать «Запрашиваемые расширения» Automapper.

Вместо вызова Map вы звоните ProjectTo.

var Res = Entities.Users.AsQueryable().Select(role => Mapper.ProjectTo<UserDTO>(role)).ToList();

См. Документы AutoMapper - Запрашиваемые расширения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...