如何为SQL Server Compact和SQL Server使用相同的EF实体?

时间:2012-03-18 17:13:11

标签: sql-server entity-framework sql-server-ce reusability provider-independent

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

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

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

  3. 问题是,最小化维护和最大化EF功能的最佳方法是什么?我还想在SQL Server中使用存储过程进行写操作,但如果太麻烦,这不是首要任务。

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

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

    编辑:我认为最好的方法是使用Code First创建我的模型并使用新代码首次迁移。通过迁移,我可以为整个服务器实例生成更改脚本,我可以在本地CE数据库上应用完整更改。另一个优点是我可以完全控制我的连接字符串,并且可以在任何提供商处真正指出它。

    手动创建POCO类,创建配置类(我更喜欢使用Fluent API定义),并将附加内容(如唯一索引)添加到第一个迁移类,但最后还需要做一些额外的工作。它是最不起作用的。

    我将不得不弄清楚如何在以后的存储过程中使用它,但是EF 5可能在那时可用并解决了我的问题。

1 个答案:

答案 0 :(得分: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支持的功能。