Tag: dto

是否可以将IQueryable 映射到IQueryable ?

这是Automapper专业人士的问题。 我已经尝试了几天的查询映射 – 并且没有运气。 似乎Automapper并不打算以我想要的方式使用它。 但也许我错了。 所以这是问题…… 我有这样的课程: CatDto(名称,年龄,玩具(ToyDto对象的集合)) ToyDto(CatName,ToyName,Cat(父CatDto对象)) Cat(来自Entity Framework,具有与CatDto类似的属性) 玩具(来自entity framework,具有与ToyDto类似的属性) 我想在我的数据访问层中编写一个通用的读取函数,如下所示: IEnumerable Read(IQueryable query) { // here “query” is converted // to Entity Framework query by means of AutoMapper, // EF query gets executed, // I convert EF entities (Cat) back to CatDto – this is not essential // result is […]

DTO的接口

我目前正在开发一个大型Web应用程序,主要包含一个Angular SPA和一个可以访问后端层的OData WebAPI。 我们处于早期阶段并且已经开始实现第一个类,包括位于公共命名空间中的Model.dll ,以便所有层都可以访问它。 我们现在正在讨论模型中的那些DTO。 有人说使用接口是绝对必要的,所以代码是这样的: namespace MySolution.Common.Model { public interface IPerson { int Id { get; set; } string Name { get; set; } … } } namespace MySolution.Common.Model { public class PersonDTO : IPerson { public int Id { get; set; } public string Name { get; set; } … } } […]

我应该为创建和更新设置不同的DTO吗? (CRUD)

我正在使用Person实体上的常规CRUD操作设计Web API。 问题是我不知道如何设计DTO。 该实体如下: public class Person { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } } 我已经确定DTO应该有相同的成员: public class PersonDto { public int Id { get; set; } public string Name { get; set; } public int Age{ get; set; } […]

AutoMapper是否也可用作重新形状映射工具

我知道AutoMapper只是映射两个对象之间的属性。 Automapper不是为了重塑数据,我认为这必须编程。 我有一个PeriodDTO.IEnumerable ,需要重新整形为PeriodListViewModel.List 。 每个CellViewModel包含一个List 这不是1比1的映射,我想也许这不应该被映射 – 因为它不可能 – public class PeriodRequest { public IEnumerable Periods { get; set; } public IEnumerable Weeks { get; set; } } public class PeriodListViewModel { public PeriodListViewModel(IEnumerable periods) { CellViewModels = new List(); var groupedPeriods = periods.GroupBy(p => p.LessonNumber).OrderBy(p => p.Key).ToList(); foreach (var groupedPeriod in groupedPeriods) { […]

根据DTO,实体模型或其他方式validation服务层中的数据?

我正在开发一个ASP.NET MVC项目。 在项目中,我有一个服务层,接受DTO进行CRUD操作。 当我需要validation业务逻辑时,validation器是否应该完全接受DTO,实体模型或其他内容? 例如: public class ProductService: IProductService { public ValidationResult CreateProduct(ProductDTO productDto) { //call productValidator.Validate(productDto) on the DTO here? Product productEntityModel = mapper.Map(productDto); //or, call productValidator.Validate(productEntityModel) on the Entity model here? if(validationResult.Valid) { _dbContext.Products.Add(productEntityModel); _dbContext.SaveChanges(); } return validationResult } } 一些想法: 我在网上看过一些关于创建一个POCO的讨论,它可以有validation逻辑(而不是使用validation服务),甚至还有其他业务逻辑。 这是有道理的,但它还是一个必须进行管理和维护的产品的“代表”。 对DTO进行validation似乎更合理,因为调用者正在向服务发送? 谢谢您的帮助!!

使用DataContractSerializer序列化接口列表

我有一个类,其中有一些嵌套类。 我将它序列化并使用没有问题的方法将其发送到wcf服务。 这是class级; public class ComputerDTO { [DataMember] public ComputerTypeDTO Type { get; set; } [DataMember] public string ComputerName { get; set; } [DataMember] public MonitorDTO Monitor { get; set; } } 这是方法; public void Check() { Computer c = new Computer(); ISystemInfoOperations cli = GetServiceClient(); Mapper.CreateMap(); Mapper.CreateMap(); Mapper.CreateMap() .ForMember(s => s.Hardware, m => m.MapFrom(q […]

AutoMapper – 为什么要覆盖整个对象?

我不明白为什么它会覆盖我的整个对象。 原因是我从db获取了我的User对象,我想从DTO分配新值。 它不是仅仅添加这些新值,而是创建具有新值但前面所有值都设置为null新对象。 我怎样才能确保在这种情况下他会“升级”我的对象,而不是创建新对象? 脚本 /users/{id} – PUT // User has id, username, fullname // UserPut has fullname public HttpResponseMessage Put(int id, UserPut userPut) { var user = _db.Users.SingleOrDefault(x => x.Id == id); // filled with properties Mapper.CreateMap(); user = Mapper.Map(userPut); // now it has only “fullname”, everything else set to null // I can’t […]

使用DTO和POCO对象时,处理导航属性的最佳做法是什么?

我正试图围绕Domain Driven Development。 我想确保我有一个良好的基础和理解它,所以如果在这里避免使用AutoMapper或类似的建议会很好。 我的架构目前涉及以下内容: WCF服务负责持久性(使用entity framework)和服务器端validation。 它将POCO转换为DTO,并将DTO转移到客户端。 客户接收DTO并将其转换为POCO。 转换POCO和DTO的类在服务和客户端之间共享。 POCO的实现IValidatableObject和INotifyPropertyChanged并且由服务器和客户端使用,但它们不用于数据传输。 DTO是,它们只是不含行为的财产袋。 (1) 问题#1。 此架构是否适用于域驱动设计。 (2) 问题#2。 POCO是否适合包含导航属性? 对于POCO来说,在DDD架构中包含导航属性对我来说真的是错误的,因为对我来说,拥有一个可能序列化也可能没有序列化的导航属性是没有意义的。 拥有专门的DTO对我来说更有意义。 例如,这是POCO / DTO在我的架构中的样子。 // Enforces consistency between a POCO and DTO public interface IExample { Int32 Id { get; set; } String Name { get; set; } } // POCO public class Example : IExample, […]

如何处理实现多个接口的对象的Dtos?

我们在WCF服务接口中使用Dtos,但是当Dto表示的业务对象实现多个接口并且我们想要在这些不同的上下文中返回Dtos并且还能够处理时,它们已经开始遇到问题Dtos在客户端上进行多态化。 例如,假设我们有一个IBusinessObject的接口, IBusinessObject包含几个属性,包含对象关系,对象属性等的详细信息。我有几个实现,这个实现是一个实现IBusinessObject和ILinear 。 还有ILinear其他实现,它们也不是业务对象,只是简单的线性事物。 我们的服务有一个获取业务对象的方法。 这将返回一个基础Dto类( BusinessObjectDto ),它声明IBusinessObject的常见部分(关系属性等)和LinearBusinessObjectDto ,它扩展了BusinessObjectDto并添加了关于事物线性方面的额外信息。 这很好,并使客户端能够以一定程度的多态性处理返回的BusinessObjects 。 我们还想要一种获得线性事物的方法。 这将返回一个基类LinearDto ,其中包含常见的线性详细信息。 简单的线性对象实现扩展了LinearDto ,一切都很好。 但是现在我有一个问题,因为我不能让我的LinearBusinessObjectDto从LinearDto和BusinessObjectDto扩展,因为只支持单inheritance,并且我不能使用接口,因为WCF不知道什么类型然后放入服务WDSL中的合同定义。 所以我开始为我的LinearBusinessObject 2个dtos,一个派生自BusinessObjectDto ( LinearBusinessObjectAsBusinessObjectDto ),另一个派生自LinearDto( LinearBusinessObjectAsLinearDto ),然后根据我感兴趣的界面转换每个LinearBusinessObjectAsLinearDto 。 这似乎会导致许多额外的Dto类(其中我已经有很多),所以我想知道是否有比这更好的解决方案? 或者这只是我们必须忍受的东西?

DTO到实体映射工具

我有一个实体类Person及其对应的DTO类PersonDto 。 public class Person: Entity { public virtual string Name { get; set; } public virtual string Phone { get; set; } public virtual string Email { get; set; } public virtual Sex Sex { get; set; } public virtual Position Position { get; set; } public virtual Division Division { get; set; } […]