Объекты передачи данных и Entity Framework - PullRequest
1 голос
/ 07 марта 2009

Я работаю над трехуровневым веб-приложением, в котором использую Microsoft Entity Framework. Чтобы создать слабую связь между различными уровнями, я использую объекты передачи данных для передачи между объектами Entity Framework и моими пользовательскими объектами, но у меня есть проблема со скоростью перевода между структурой сущностей и моими пользовательскими DTO. Я использую этот метод для перевода из EF в DTO:

public List Transform(List carModelDefinition) {</p> <pre><code> List<CarDefinitionDTO> cdDTOList = new List<CarDefinitionDTO>(); foreach (DataLayer.CarModelDefinition cmd in carModelDefinition) { CarDefinitionDTO cdDTO = new CarDefinitionDTO(); cdDTO.CarDefinitionId = cmd.CarModelDefinitionId; cdDTO.Compagny = cmd.Company; cdDTO.Model = cmd.Model; cdDTOList.Add(cdDTO); } return cdDTOList; }

Но когда я пытаюсь передать список, например, 600 элементов у меня занимает около 10+ секунд. Я делаю что-то не так, или скорость просто такая медленная? NB. Я работаю на довольно быстром ПК, поэтому не скорость моего компьютера замедляет его.

Ответы [ 5 ]

2 голосов
/ 08 марта 2009

Я нашел ошибку. В конструкторе я создаю экземпляр диспетчера сущностей, и когда я создаю новый объект, он все время создает новый экземпляр, что отнимает много времени.

1 голос
/ 07 марта 2009

Код, который вы опубликовали, делает больше, чем просто перевод между типом EF и типом DTO - вы также получаете данные из базы данных. Попробуйте разделить два для целей измерения. Скорее всего, получение данных занимает 10 секунд, а не время, затрачиваемое на перемещение данных в памяти.

0 голосов
/ 23 июля 2014

Вы можете попробовать zip и unzip данные в двоичном виде (сжатие и распаковка).

0 голосов
/ 28 ноября 2012

DRY! Попробуйте использовать генератор DTO / Assembler, например EntitiesToDTOs . Он генерирует DTO и Ассемблеры из вашего EDMX-файла Entity Framework. Таким образом, вам не придется кодировать каждое сопоставление Entity / DTO, Ассемблеры добавят методы расширения к вашим сущностям и сгенерированные DTO, так что вы в конечном итоге будете кодировать так:

var myCar = new Car();
CarDTO dto = myCar.ToDTO();
myCar = dto.ToEntity();

или

ICollection<Car> carCol = new List<Car>();
ICollection<CarDTO> carDTOs = carCol.ToDTOs();
carCol = carDTOs.ToEntities();

Довольно просто, и инструмент действительно прост в использовании.

0 голосов
/ 07 марта 2009

Я загружаю это, говоря:

        public List<CarDefinitionDTO> LoadAll()
    {
        List<DataLayer.CarModelDefinition> carList = (from cd in mee.CarModelDefinition select cd).ToList();
        CarDefinitionDTO cdDTO = new CarDefinitionDTO();
        List<CarDefinitionDTO> carDefList = cdDTO.Transform(carList);
        return carDefList;
    }
...