数据传输对象和实体框架

时间:2009-03-07 12:17:07

标签: entity-framework entity

我正在使用3层Web应用程序,我正在使用Microsoft实体框架。 为了在不同的层之间建立松散耦合,我使用数据传输对象在Entity Framework对象和我的自定义对象之间进行传输,但是我对实体框架和我的自定义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;

}

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。我正在使用速度非常快的PC,因此我的电脑速度并不会降低速度。

5 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分: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;
    }

答案 3 :(得分:0)

DRY! 尝试使用像EntitiesToDTOs这样的DTO /汇编程序生成器。它从您的Entity Framework EDMX文件生成DTO和汇编程序。 这样您就不必对每个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();

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

答案 4 :(得分:0)

您可以尝试zipunzip二进制形式的数据(压缩和解压缩)。