1

我迫切需要一些 EF 专家的建议。您将如何创建自定义实体而不是跨越 DDD 中的多个表?据我所知,有3种可能的解决方案:

  1. 在模型中创建自定义实体并为其添加 DefiningQuery,它充当该实体的视图,本质上在纯 SQL 中连接多个表,

  2. 创建一个自定义实体作为具有其他实体作为其属性的 POCO 类。使用 LINQ 查询时,首先将您需要的数据投射到匿名对象中,然后投射到该自定义实体中,

  3. 在数据库中创建一个跨越多个表的视图并将其添加到模型中

第一个选项将创建对特定数据源实现 (Oracle) 的依赖,因为我们需要编写 Oracle 投诉 SQL 查询。

第二种解决方案中的自定义对象是在模型和 TBH 之外定义的,这是我最喜欢的一个,除了必须了解 LINQ 的人之外,它看不到任何真正的缺陷:)

第三种选择意味着创建大量的数据库视图,我不确定我们的 DBA 会不会太高兴。

请分享您的意见,哪种解决方案对您来说听起来更合理。谢谢

4

1 回答 1

1

如果您的数据库表已正确配置一对一关系,您可以使用实体拆分。如果没有一对一的关系,从 EF 的角度来看,您的表跨越不是确定性的。

除了您提到的选项之外,您还可以尝试使用QueryView - ESQL 查询映射到 EDMX 文件中的自定义 POCO。它就像隐藏在映射中的第一个和第二个选项的组合(独立于存储)。问题是 QueryView 仅支持 ESQL 的子集,因此它实际上取决于您要映射的内容。

于 2012-06-11T19:44:54.403 回答