1

我有一个项目创建可在两种模式下运行的程序:如何为SQL Server Compact和SQL Server使用相同的EF实体?

  1. 内部用户访问一个集中的数据库(SQL Server),并可以查看/编辑每个人的项目,或

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

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

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

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

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

这是一些额外的工作由手工打造的POCO类,创建配置类(我更喜欢用流利的API定义),并以群众演员(如唯一索引)添加到第一个移民类,但在结束其最少的工作。

我将不得不弄清楚如何在稍后的日期分流存储过程的使用情况,但EF 5可能可用,并已解决我的问题。

回答

1

我还想在SQL Server中使用存储过程来编写 操作,但如果操作太麻烦了,这不是重中之重。

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

我可以使用DbContext Generator T4模板去代码优先的方向,但后来我失去了很多EF好处,如更改跟踪和存储过程映射。

您将失去只是存储过程映射。更改跟踪将以相同的方式工作。你也可以为两个数据库服务器使用相同的映射代码,但是你将不得不面对SQL Server和SQL Server compact之间的一些细微差别。

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

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

+0

感谢您的回复。由于大部分数据库访问都是读取操作,因此我仍然设想高度重用。但为了安全起见,我不想让每个人都可以访问CUD操作。除此之外,我对所有其他限制因素都很满意。我只是寻找最方便的方式来做到这一点。 – 2012-03-19 21:34:15

相关问题