- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个项目,该项目使用汇编器模式将 LinqToEntity 实体组装成服务级别的数据传输对象,然后将其传递到客户端层以供使用。该方法是将实体对象转换为简化的平面对象,提供特定于服务调用的信息。
例如。
// Original Entity looks something like this
public class PersonEntity
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int MotherId { get; set; }
public PersonEntity Mother { get; set; }
// lots of other properties
}
// Flattened DTO
public class PersonSummaryInfo
{
public int Id { get; set; }
public string FullName { get; set; }
public string MothersFullName { get; set; }
}
在此示例中,汇编器将创建一个 PersonSummaryInfo,构造该过程的 FullNames 部分。
我现在面临一些第 3 方控件(Telerik ASP.NET MVC GridControl)的问题,其中控件设置为基于其模型属性进行过滤(使用 IQueryable)。似乎有一种想法是采用单层设计并将数据库实体直接注入(inject) View 中,这是我无法忍受的。
尝试将其合并到我的逻辑中,GridControl 绑定(bind)到我的 DTO 而不是实体,这一切都很好,直到它尝试对任何内容进行排序。我以一种非常通用的方式将所有 IQueryable 内容推送到我的服务中,以使其对此负责。排序尝试按 DTO 上的 MothersFullName 进行排序(其行为是将“MothersFullName”作为字符串传递给排序逻辑),这会被推送到我的服务,该服务通过反射尝试对实体进行排序,利用 IQueryable 惰性加载,但是当然,当执行查询时,会抛出异常,因为“MothersFullName”不是原始实体的属性。
是否有一个好的策略来处理这种实现?一旦 DTO 回到应用程序的服务层,有效地将 DTO“分解”回其 ORM 实体是一种好的做法吗?还是传递更丰富的对象来更好地了解它们的含义(例如如何使用 FirstName 和 LastName 对全名进行排序)?
我的要求的关键是:
最佳答案
您面前有几个选择。首先,确实能够绑定(bind)到 IQueryable,因为当然就开发时间而言,这是最快(也是最常见)的方法。
就您的情况(ORM 之上的完整服务层)而言,情况有点不同。我个人建议您稍微挖掘一下并提供 custom bindings到你的网格。您将获得一个 GridCommand 对象,您可以查询该对象以进行排序和过滤,并使用它向服务层请求数据。这是一个很好的地方,可以提及解决您所面临的问题的简单方法(即您的表达式基于 DTO 属性)。您可以尝试使用Dynamic Linq 。只需从表达式构建字符串查询并将它们传递到 DAL 即可。
事实上,这是 Telerik 的另一个产品 OpenAccess ORM 建议的最佳实践。 OpenAccess SDK包含几个使用与您的架构类似的架构的示例(尤其是 WCF 普通服务示例)。该产品还提供了code generation tool它提供了一个完整的服务层。
关于.net - DTO 和 IQueryable : assembling and disassembling DTOs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10952756/
嘿,在下面的代码中,我在此列表中存储了几个 SQL 行。然而,当我打印它时,它显示的唯一内容是指针。如何让它打印出数据行,以便我可以检查是否获得了正确的信息。谢谢大家! List list = un
假设我有具有以下字段的 PostDTO: private Long id; private ShortInfoUserDTO author; private CategoryDTO category;
我们在我们的 WCF 服务接口(interface)中使用 Dtos,但是当 Dto 代表的业务对象实现多个接口(interface)并且我们希望在这些不同的上下文中返回 Dtos 并且还能够在客户端
NestJS文档展示了如何添加DTO,以便在控制器中使用类验证器包来验证请求对象。描述的DTO有打字脚本类。现在,控制器处理DTO(TS类),而NestJS提供程序(或服务)则使用类型脚本接口。这些D
我开始使用 ArangoDB 作为现有 java SpringBoot(和 SpringData)应用程序的持久层。DTO 有很多,它们都是不可变的类(使用 AutoValue)。 因此,没有默认构造
我正在学习 ASP.NET 存储库模式。我做了一些研究,但找不到正确的答案。 我的 DAL 上有一个数据库实体 Employee,它有许多列。 我有 EmployeeRepository 负责使用 D
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我正在开发一个项目,该项目使用汇编器模式将 LinqToEntity 实体组装成服务级别的数据传输对象,然后将其传递到客户端层以供使用。该方法是将实体对象转换为简化的平面对象,提供特定于服务调用的信息
我有一个 nodejs REST API 后端运行 nestjs 框架,使用 typeORM 作为我实体的 ORM . 来自 C#/Entity Framework 背景,我非常习惯将我的 Dto 映
我认为最好开始描述我正在做的事情,并在最后将其汇总起来解决大问题: 我正在使用 Google 的 GWT 构建一个网络应用程序,并封装某些代码以便在我开发移动客户端时可重用。到目前为止,我有以下项目:
我正在使用 Flink,并且有一个 JSON 字符串流到达我的系统,其中包含动态更改的字段和嵌套字段。所以我不能模拟这个传入的 JSON 并将其转换为静态 POJO,我必须依赖于 Map。 我的第一个
LINQ to SQL 非常棒,但在某些情况下会适得其反。对于我的案例,它适得其反。 我有一个 StudentServiceDm,它映射到一个包含 40 个字段的 StudentService 表。我
我的 spring-boot 项目需要一个用户管理服务。我对spring中DTO(Data transfer object)的使用大体了解。但是当我考虑设计服务时,我只为一个“用户”模型使用多个 DT
我是一名优秀的程序员,十分优秀!