将EF模型暴露给各种客户

时间:2010-07-22 17:22:13

标签: c# entity-framework architecture

嘿伙计们,我希望每个人都做得很好。

我(更多)是一个广泛的问题,指的是向不同的客户公开模型。

以下是我的情况:我有一个使用EF 4.0和第三方Oracle提供商创建的模型(位于Oracle之上)。该模型驻留在库中,因此可以由多个项目轻松引用。

我的目标是让尽可能多的客户使用该模型:

  1. .Net客户端代码(Silverlight,WPF和ASP.Net,服务等)。
  2. MS Office应用程序(Excel)
  3. 现在,我不想进入在模型上创建自定义方法的业务(例如GetCustomersWhoAreVeryUpsetOrderedByUpsetRank())。我希望能够以这样的方式公开模型,即客户端代码可以决定(在运行时)如何构造查询。我应该接受IQueriable,在服务中执行它并返回结果数据集吗?或者我让客户通过模型完成所有工作?

    我确实给了oData一个镜头,但似乎用于针对模型编写Linq查询的客户端库是相当有限的。此外,该协议不支持更新。

    所以我的问题是基于上述标准揭示模型的最佳方法/技术/实施是什么?

    非常感谢提前。

1 个答案:

答案 0 :(得分:1)

我建议您不要与您的客户1:1分享您的模型,或者以1:1的比例为不同的客户重复使用。

要与利益相关者分享,请使用一些简单的DTOs。可以使用CASE工具,T4转换或任何其他源代码创建自动创建映射代码。如果您共享自己的模型,只要您需要/想要重构某些内容或者某个客户端有某些特定要求,您就会遇到问题。

几乎相同取决于EF(DAL)的查询方法。定义一些具有共同要求的DataMappers接口并实现默认行为。如果您需要GetCustomersWhoAreVeryUpsetOrderedByUpsetRank(),那么您就可以了,因为您可以将此查询添加到从默认映射器派生的数据映射器中。通过这种方法,核心系统保持清晰和可重用,每个客户都能够获得她/他的自定义功能。