我迫切需要一些EF专家建议。如何创建自定义实体而不是跨越DDD中的多个表?据我所知,有三种可能的解决方案:
在模型中创建自定义实体并为其添加DefiningQuery,它充当该实体的视图,本质上是在纯SQL中连接多个表,
将自定义实体创建为POCO类,其中包含其他实体作为其属性。使用LINQ查询时,首先将您需要的项目数据投射到匿名对象,然后投影到该自定义实体,
在DB中创建一个跨多个表并将其添加到模型的视图
第一个选项会创建对特定数据源实现(Oracle)的依赖,因为我们需要编写Oracle投诉SQL查询。
第二个解决方案中的自定义对象是在模型和TBH之外定义的,是我最喜欢的,除了有人不得不理解LINQ之外,看不到任何真正的陷阱:)
第三个选项意味着创建大量的数据库视图,我不确定我们的DBA会非常高兴。
请分享您的意见,哪种解决方案听起来更合理。感谢
答案 0 :(得分:1)
如果您的数据库表已正确配置一对一关系,则可以使用entity splitting。如果没有一对一的关系,那么从EF的角度看,您的表格跨度不是确定性的。
除了您提到的选项之外,您还可以尝试使用QueryView - ESQL查询映射到EDMX文件中的自定义POCO。它就像隐藏在映射内的第一个和第二个选项的组合(独立于存储)。问题是QueryView仅支持ESQL的子集,因此它实际上取决于您想要映射的内容。