Entity framework 数据传输对象和实体框架
我正在开发一个三层web应用程序,其中我使用的是microsoft实体框架。 为了在不同层之间实现松散耦合,我使用数据传输对象在实体框架对象和自定义对象之间进行传输,但在实体框架和自定义DTO之间的转换速度方面存在问题。 我使用此方法从EF传输到DTO:Entity framework 数据传输对象和实体框架,entity-framework,entity,Entity Framework,Entity,我正在开发一个三层web应用程序,其中我使用的是microsoft实体框架。 为了在不同层之间实现松散耦合,我使用数据传输对象在实体框架对象和自定义对象之间进行传输,但在实体框架和自定义DTO之间的转换速度方面存在问题。 我使用此方法从EF传输到DTO: 公共列表转换(列表carModelDefinition) { List cdDTOList=new List(); foreach(CarModelDefinition中的DataLayer.CarModelDefinition cmd) {
公共列表转换(列表carModelDefinition)
{
List cdDTOList=new List();
foreach(CarModelDefinition中的DataLayer.CarModelDefinition cmd)
{
CardDefinitionTo cdDTO=新的CardDefinitionTo();
cdDTO.CarDefinitionId=cmd.carmodeldfinitionId;
cdDTO.Compagny=cmd.Company;
cdDTO.Model=cmd.Model;
cdDTOList.Add(cdDTO);
}
返回cdDTOList;
}
但是,当我尝试传输一个包含600个元素的列表时,我需要10秒以上的时间。是我做错了什么,还是速度这么慢?
注意。我在一台速度非常快的电脑上工作,所以不是我的电脑的速度减慢了速度。你发布的代码不仅仅是在EF类型和DTO类型之间转换,你还从数据库中获取数据。为便于测量,尝试将两者分开。很可能是数据检索需要10秒,而不是在内存中移动数据所花费的时间。我通过以下方式加载它:
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;
}
public List LoadAll()
{
List carList=(从mee.CarModelDefinition中的cd中选择cd.ToList();
CardDefinitionTo cdDTO=新的CardDefinitionTo();
List carDefList=cdDTO.Transform(carList);
返回卡片列表;
}
我发现了错误。在构造函数中,我创建了实体管理器的实例,当我创建一个新对象时,它会一直创建一个新实例,这相当耗时。DRY!
尝试使用DTO/汇编生成器,如。它从实体框架EDMX文件生成DTO和汇编程序。
这样,您就不必对每个实体/DTO映射进行编码,汇编器将向您的实体和生成的DTO添加扩展方法,因此您最终可以这样编码:
var myCar = new Car();
CarDTO dto = myCar.ToDTO();
myCar = dto.ToEntity();
或:
ICollection carCol=new List();
ICollection carDTOs=carCol.ToDTOs();
carCol=carDTOs.toenties();
非常简单,而且该工具非常易于使用。您可以尝试
zip
和unzip
二进制格式的数据(压缩和解压缩)
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();