Linq to SQL и Auto Mapper - PullRequest
       15

Linq to SQL и Auto Mapper

1 голос
/ 28 июня 2011

У меня есть следующие настройки

  • Linq to SQL data context
  • Объекты передачи данных (DTO), которые я использую для передачи данных из моего бизнес-уровня в мой пользовательский интерфейс.

Типичное использование моего DTO - это то, где я соединяю таблицы из своей базы данных, чтобы я мог передать в свой UI один объект данных, содержащий объединенный результат.

У меня есть код, подобныйэто (это значительно меньше реального кода для публикации в SO) ...

IQueryable<CustomerEventDto> query = (
    from ce in db.CustomerEvents
    join cet in db.CustomerEventTypes on ce.CustomerEventTypeId equals cet.CustomerEventTypeId
    join c in db.Customers on ce.PidCreating equals c.Pid
    join c in db.Countries on ce.CountryId equals c.CountryId                                                   
    join t in db.TimeZones on ce.TimeZoneId equals t.TimeZoneId
    where ce.Pid == pid
    select new CustomerEventDto()
    {
        ApprovedHR = ce.ApprovedHR,
        City = ce.City,
        Closed = ce.Closed,
        CountryId = ce.CountryId,
        CountryCode = c.CodeISO3166Alpha2,
        CreatorForename = c.CustomersUnique.Forename,
        CreatorSurname = c.CustomersUnique.Surname,
        CreatorUsername = c.UserName,
        Email = ce.Email,
        EventDateTime = ce.DateTime,
        EventType = ce.CustomerEventTypeId,
        EventTypeDescription = cet.Detail,
        LockedOutSecurity = ce.LockedOutSecurity,
        LockedOutSuspension = ce.LockedOutSuspension,
        TimeZoneDifference = t.Difference,
        TimeZoneId = ce.TimeZoneId,
        TimeZoneName = t.ZoneName
    });

    query = query
        .OptionalWhere(from, ce => (ce.EventDateTime >= from.StartOfDayNullable()))
        .OptionalWhere(to, ce => (ce.EventDateTime <= to.StartOfDayNullable()))
        .OptionalWhere(eventType, ce => (ce.EventType == eventType));
    return query.ToList();

Есть ли способ, которым я могу использовать Auto Mapper для этого отображения?

Ответы [ 4 ]

2 голосов
/ 28 июня 2011

когда мне нужно использовать много прогнозов, группировок и условий для заполнения одного DTO, я использую представления базы данных и выполняю эти задачи в представлениях.Это устранит сложность использования инструментов сопоставления объектов, и ваш текст данных вернет готовые к использованию объекты

1 голос
/ 02 декабря 2014

Расширение ответа @kgolovchenko о проекте Проектор LINQ похоже, что AutoMapper недавно добавил эту функцию

var model = entites.Query().To<EntityModel>()
                   .Where(m => m.Name.StartsWith("One"))
                   .First();
0 голосов
/ 15 марта 2013

Посмотрите на Проектор LINQ . Это именно то, что вы хотите. Насколько я знаю, AutoMapper нельзя использовать с выражениями LINQ.

0 голосов
/ 28 июня 2011

Полагаю, вы имеете в виду отображение ваших объектов БД на объект CustomerEventDto, верно?

Краткий ответ: Да, это должно быть возможным.Ответ: Да, вы должны быть в состоянии использовать AutoMapper для этих преобразований, я думаю, что только установка будет немного сложной.Может быть, это будет работать из коробки, хотя ...

хмм, я писал небольшой пример кода, но, написав его, я понял, что, вероятно, это будет не так просто, как кажется, как вы хотитеспроецировать несколько объектов БД на 1 CustomerEventDto объект.Я думаю, что сложная установка, вероятно, не стоит проблем ...

Так что мой вывод пока что невозможен.Если вы или кто-то еще найдет решение, пожалуйста, опубликуйте его, чтобы я мог также использовать эту технику в будущем!

Извините, что больше не могу помочь.

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