关于我们的设计,我可以问自己哪些问题,以确定我们是否应该在应用程序中使用 DTO 或自我跟踪实体?
以下是我知道要考虑的一些事情:
那么,我怎样才能确定什么是适合我们的呢?我以前从未使用过 EF,所以我真的不知道 STE 是否适合我们。
我看到人们建议从 STE 开始,并且只在问题出现时才实现 DTO,但是我们目前已经有了 DTO,并且正在尝试确定使用 STE 是否会让生活更轻松。我们在这个过程中已经足够早了,切换不会花费太长时间,但我不想切换到 STE 只是发现它对我们不起作用并且必须将所有东西都切换回来。
最佳答案
如果我了解您的架构,我认为这对 STEs 不利因为:
STE 的主要优势(也是唯一优势)是它们的跟踪能力,但只有在双方都使用 STE 时,跟踪能力才有效:
简而言之:客户端或服务器端没有其他模型。要充分使用 STE,它们必须:
任何其他情况仅仅意味着您没有利用自我跟踪能力,也不需要它们。
你的其他要求呢?
这应该是可能的,但要确保每个“延迟加载”部分都是单独的结构——不要在客户端构建复杂的模型。我已经看到人们不得不将整个实体图发回以进行更新的问题,这并不是您一直想要的。因此,我认为您不应该将加载的部分连接到单个实体图中。
我不确定您希望如何实际实现这一目标。 STE 不使用投影,因此您必须直接在实体中为空字段。请注意,您必须在实体未处于跟踪状态时执行此操作,否则您的掩码将保存到数据库中。
这不是 STE 的问题。服务器必须使用正确的 EF 上下文来加载和保存数据。
STE是变更集模式的实现。如果您想使用它们,您应该遵循它们的规则以充分利用该模式。如果使用得当,它们可以节省一些时间,但这种速度的提升伴随着一些架构决策的牺牲。与任何其他技术一样,它们并不完美,有时您会发现它们很难使用(只需关注 self-tracking-entities 标签即可查看问题)。他们也有一些serious disadvantages但在 .NET WPF 客户端中,您不会遇到它们。
关于wcf - 我怎么知道我应该使用 self 跟踪实体还是 DTO/POCO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5407673/