1

我正在开发一个使用 microsoft Entity Framework 的 3 层 Web 应用程序。为了在不同层之间建立松散耦合,我使用数据传输对象在实体框架对象和我的自定义对象之间进行传输,但是我在实体框架和我的自定义 DTO 之间的转换速度存在问题。我使用这种方法从 EF 转移到 DTO:

public List Transform(List carModelDefinition) {

        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 秒以上的时间。我做错了什么,还是速度这么慢?注意。我正在使用一台速度非常快的 PC,所以不是我的 PC 的速度减慢了它的速度。

4

5 回答 5

2

我发现了错误。在构造函数中我创建了实体管理器的实例,当我创建一个新对象时,它会一直创建一个新实例,这非常耗时。

于 2009-03-08T08:55:47.233 回答
1

您发布的代码不仅仅是在 EF 类型和 DTO 类型之间进行转换 - 您还从数据库中获取数据。尝试将两者分开以进行测量。很有可能是数据检索需要 10 秒,而不是在内存中移动数据所花费的时间。

于 2009-03-07T12:28:10.430 回答
0

我说:

        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;
    }
于 2009-03-07T20:27:23.617 回答
0

干燥!尝试使用像EntitiesToDTOs这样的 DTO/Assembler 生成器。它从您的实体框架 EDMX 文件生成 DTO 和汇编程序。这样您就不必编写每个实体/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();

非常简单,该工具非常易于使用。

于 2012-11-28T12:54:37.650 回答
0

您可以尝试将数据以二进制形式(压缩zip和解unzip压缩)。

于 2014-07-23T03:02:06.467 回答