1

我有一个项目来创建一个可以在两种模式下运行的程序:

  1. 内部用户访问集中式数据库 (SQL Server) 并可以查看/编辑彼此的项目,或者

  2. 外部客户在本地创建自己的所有数据 (SQL Server Compact),并通过电子邮件将其打包成 XML 以请求报价。

问题是,要最大限度地减少维护并最大限度地提高 EF 功能,最好的方法是什么?我还想在 SQL Server 中使用存储过程进行写操作,但如果太麻烦,这不是首要任务。

我可以在部署之前手动创建一个单独的 SSDL,但这是额外的工作并且容易出错。我可以先使用 Model First,但我认为这会使两个提供商的数据库更新变得复杂。我可以使用 DbContext Generator T4 模板进行 Code First 方向,但是我失去了很多 EF 的好处,比如更改跟踪和存储过程映射。而对于 CF,我必须大大增强 T4 模板,否则我仍然必须创建一个单独的 SSDL。

是否有文章或任何工具可以使这更容易?

编辑:我决定完成此任务的最佳方法是使用 Code First 来创建我的模型并使用新的代码优先迁移。通过迁移,我可以为完整的服务器实例生成一个更改脚本,并且可以将完整的更改应用于本地 CE 数据库。另一个优点是我可以完全控制我的连接字符串,并且可以真正将它指向任何提供者。

手动创建 POCO 类、创建配置类(我更喜欢通过 Fluent API 定义)以及将额外内容(如唯一索引)添加到第一个迁移类是一些额外的工作,但最终它最少整体工作。

稍后我将不得不弄清楚如何分流存储过程的使用,但届时 EF 5 可能可用并解决了我的问题。

4

1 回答 1

1

我还想在 SQL Server 中使用存储过程进行写操作,但如果太麻烦,这不是首要任务。

SQL Compact 不支持存储过程,因此,如果您是认真的,您将无法以任何方式重用您的映射。

我可以使用 DbContext Generator T4 模板进行 Code First 方向,但是我失去了很多 EF 的好处,比如更改跟踪和存储过程映射。

您将失去刚刚存储的过程映射。更改跟踪将以相同的方式工作。您还可以对两个数据库服务器使用相同的映射代码,但您必须解决 SQL Server 和 SQL Server compact 之间的一些细微差别。

我可以在部署之前手动创建一个单独的 SSDL,但这是额外的工作并且容易出错。

如果您想使用 EDMX 以及具有相同代码库的大型 SQL Server 和 SQL Server Compact,则必须这样做。此外,您必须将大型 SQL Server 实现的功能限制为仅受 SQL Server Compact 支持的功能。

于 2012-03-18T19:45:17.000 回答