gpt4 book ai didi

c# - 我应该将 EF 中的实体视为域模型还是 DTO?

转载 作者:太空宇宙 更新时间:2023-11-03 10:57:20 24 4
gpt4 key购买 nike

我是 Entity Framework 的新手(代码优先,如果重要的话)。当我一直在使用它时,我一直在构建我的 POCO 类,将它们视为最终领域模型。对于延迟加载之类的东西,我喜欢这样的想法,即我可以直接在我的表示层中使用这些实体,从而延迟加载我实际需要的东西。

不过,我最近还了解了数据传输对象,这是我以前从未听说过的。这绝对有道理;我的最终领域模型的行为可能有一些不属于 DAL 的业务规则。例如,我提供给 Entity Framework 的 POCO SalesOrder 是否应该包括它的 final方法,如 AddItem(Product),如果 Product 会抛出异常有一个 DiscontinuedDateSalesOrder.OrderDate 之前。这绝对听起来像是属于 BLL 的东西。

所以,我想这意味着我为 Entity Framework 提供的 POCO 类应该更像 DTO 类?像 SalesOrderDtoEmployeeDto 只是简单的小数据持有者,只有属性和没有方法然后被映射(可能使用 AutoMapper)到我的 BLL 中的域对象,然后传递给表示层?

我是否在正确的轨道上,或者我错过了什么。我感到困惑,因为 DTO 的想法非常合理,但我从未见过它们在 Entity Framework 的上下文中使用。

最佳答案

这取决于你。仅映射属性,因此您可以自由添加方法(并且通过生成 Database First 部分类,因此您可以执行相同的操作)。

通常,业务对象不一定直接映射到存储对象。在那种情况下,您的业务对象可以存在于一个或多个存储对象之外,是否首先(自动)将这些对象映射到 DTO 也取决于您。

但是请注意,无论如何,业务逻辑不应驻留在实体中。虽然只保留 Customer.FullName 属性(返回 Customer.FirstName + ""+ Customer.LastName)可能很诱人,但您会想要这样的逻辑(只是作为适当类中的 RegisterCustomer() 方法)。

关于c# - 我应该将 EF 中的实体视为域模型还是 DTO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19006054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com