3

先说一下环境:

我们使用名为 Clearview 的程序来管理与客户的服务关系,包括呼叫中心和现场服务工作。为了更好地支持客户和我们的现场技术人员,我们还开发了一个网站,以提供对 Clearview 服务记录和报告的访问。随着时间的推移,我们需要自定义行为并添加新功能导致越来越多的东西与这个网站及其数据库相关联。

在这一点上,我们正在处理诸如部分在 Clearview 数据库中和部分在网站数据库中定义的公司之类的事情。为了更好地衡量,我们还开始将电话系统的脚本绑定到同一个网站,这也需要与电话系统自己的数据库进行对话。

所有这些都已设置好并正在运行……但我们没有一个好的数据层来处理这一切。我们迁移到 Linq to SQL,现在有两个我们可以使用的 DBML,还有一些我在听说过 Linq 之前编写的自定义类,以及一些旧式 ADO 数据集。所以,是的,基本上事情是一团糟。

我想要的是一个数据层,它为我们的应用程序提供单个前端,并在后端将所有内容管理到正确的数据库中。

我听说过实体框架允许从多个源构建类,但事实证明只能有一个数据库。所以问题是,我该如何进行呢?

我目前正在考虑为每个数据库设置 Linq To SQL 类,然后手动编写将这些连接在一起的 Linq 兼容前端。似乎需要做很多工作,并且鉴于 Linq 的限制(例如无法刷新),我不确定这是一个好主意。

我可以用 Entity Framework 做一些效果更好的事情吗?我应该研究其他工具吗?我疯了吗?

4

3 回答 3

1

实体框架确实提供了一定程度的数据库独立性,因为您可以从一个数据库构建实体模型,然后使用不同的实体连接字符串将其连接到不同的数据库。但是,正如您所说,它仍然只是一个数据库,而且,它仅限于支持实体框架的数据库。许多人这样做,但不是全部。您可以在单个应用程序中使用多个实体模型,以便使用实体框架组合多个数据库。ADO.NET 团队博客上有一些关于此的信息。但是,实体框架对此的支持充其量只是处于早期阶段。

我解决这个问题的方法是抽象我对存储库模式背后的实体框架的使用。对我来说,这样做最直接的好处是使单元测试变得非常简单;我没有尝试模拟我的实体模型,而是简单地替换了一个返回 IQueryables 的模拟存储库。但同样的模式对于组合多个数据源或没有实体框架提供程序的数据源(例如非数据服务感知的 Web 服务)也非常有用。

所以我不会说“不要使用实体框架”。我喜欢它,我自己使用它。鉴于微软最近的消息,我相信它是比 LINQ to SQL 更好的选择。但它本身并不能解决你描述的问题。使用存储库模式。

于 2009-01-06T17:43:49.060 回答
1

如果您想使用 Linq2SQl 或 EF 之类的工具,并且不想管理多个 DBMLS(或在 EF 或其他工具中调用它),您可以在您的网站数据库中创建视图,将其引用回 ClearView 或电话系统的数据库。

这允许您将您的网站与其数据库结构分离。我相信 Linq2Sql 和 EF 可以使用视图作为实体的源。如果他们不能看 nHibernate。

这也将让您拥有从各种数据源中提取的复合实体。在 SQL Server 中更新视图存在一些限制;但是,您可以在视图上定义自己的而不是触发器,然后可以执行实际的插入更新删除语句。

于 2009-01-06T17:50:27.953 回答
0

L2S 在我的项目中完美地与视图一起工作。您只需要做一个小技巧: 1. 在当前数据库中添加一个辅助数据库表作为视图。2. 在 Designer 中,将主键属性添加到视图上的 id 字段。3. 只是现在,在原始数据库中添加到您想要的任何其他表的关联。

现在,您可能会看到可用于导航的视图。

于 2010-10-28T16:21:45.563 回答