我正在使用 Entity Framework 5 和 Code First 方法,并使用 Fluent API 进行实体配置。我的项目有一个特定的产品实体,它的一半数据来自数据库,另一半来自通过 WCF 客户端检索的数据合同(它是用于管理产品库存的第 3 方系统)。Data Contract 是 Product Entity 类的成员(我还没有决定的属性或方法)。
我不希望实体中包含任何 WCF 客户端逻辑。我更愿意将此逻辑保留在存储库代码(DbContext、DbSet 等)中。
那么在从数据库中检索到产品实体之后,是否有一种技术可以连接到实体框架(或拦截)?我应该注意到产品实体作为导航属性出现在其他实体上。如果挂钩或拦截是可能的,那么这意味着我可以在 EF 从数据库加载产品实体后立即从 SOAP 服务检索数据协定。我的项目的好处是 WCF 客户端检索代码不需要在整个应用程序中重复。
我的一个想法是为 Data Contract 实现 IDbSet,而 IDbSet 将负责检索它。然后以某种方式欺骗 EF 认为它是产品实体上的导航属性。但我不确定数据库 DbSet 是否可以在同一个 DbContext 中与非数据库 IDbSet 混合。还有另一个问题 - EF 如何知道从 IDbSet 植入中检索导航属性?在投入时间之前,我想知道这个想法是否可行。我也想知道从哪里开始寻找。
请注意,我使用 .NET 已经超过 10 年了,但是这个 EF5 的东西对我来说还是比较新的。
提前致谢。
-山姆