将 EF 模型从 SSCE 4.0 切换到 SQL Server 2008 R2
Posted
技术标签:
【中文标题】将 EF 模型从 SSCE 4.0 切换到 SQL Server 2008 R2【英文标题】:Switching EF Model from SSCE 4.0 to SQL Server 2008 R2 【发布时间】:2011-12-09 15:02:04 【问题描述】:这是一个新项目,它将在桌面上启动,并可选择扩展到 SQL Server 2008 R2 或 SQL Server 2012 上的多个用户
我正在寻找一些现实世界的经验、技巧、陷阱等。
更新 - 理想情况下,希望通过配置条目在运行时切换。
更新 2 - 有没有可以在这里使用的模式?
UPDATE 3 - SQL SERVER 2008 db schema 已经在 prod 中使用,因此不能先从 ssce 模型代码开始,然后再从那里开始
【问题讨论】:
运行时需要切换吗? SSCE 4.0 的用例是什么?我们将 SQL2008 R2 Express 与 SSCE 4.0 作为连接到主服务器的本地数据库进行了几次比较,SQL Express 赢得了胜利。问题的症结在于,我们已经有了一个模式,并将其转换为数据库引擎,但存在许多差距,这使得成本远远超过收益。 无法安装 sqlexpress,因为 pc 占用空间/请求必须保持在最小值 【参考方案1】:实际上 SSCE 4.0 和 SQL Server 的 EF 模型是不同的,因此您需要创建一些“facade”。 另一个不错的选择可能是 EF Code First,您只需更改连接字符串。
【讨论】:
我认为只有 SSDL/MSL 不同...不是吗?【参考方案2】:理论
EDMX
对于 EDMX,您至少需要两个 SSDL 文件。一种用于 SQL Server,另一种用于 SQL Server CE。原因是 SSDL 文件描述了包括数据库类型的数据库。 SQL Server CE 中的某些类型是不同的。例如,SQL server CE 不支持NVARCHAR(max)
,您必须改用NTEXT
。 SSDL 还包含有关提供程序清单的信息,因此即使您的列类型和名称完全相同,您仍然需要 SSDL 来区分提供程序清单。
如果两个数据库中的表和名称相同,则可以使用相同的 MSL(CSDL 必须相同)。使用两个 SSDL 要困难得多,因为它要么意味着两个 EDMX 和一些手动同步更改,要么意味着单个 EDMX 和一些脚本,这些脚本将提取第二个 SSDL 或在 XML 文件中手动维护整个映射。实体框架 VS 设计器并没有为这种类型的使用做好准备。
代码优先
代码优先提供了更加简化的情况,因为您不必处理 SSDL。 SSDL 会在您的应用程序启动时根据连接字符串中定义的提供程序和模型中定义的映射自动创建。
当涉及到 SQL Server 和 SQL Server CE 中的不同数据类型时,即使是代码优先也可能会出现问题。作为示例,我们可以再次使用大字符串。
实践
理论说这是可能的。实践表明,这可能更具挑战性。 SQL Server 和 SQL Server CE 是不同的数据库服务器,具有不同的特性和性能。 SQL Server 提供了更多功能,其中一些功能根本不适用于 SQL Server CE(视图、sql 过程)(您提到您已经有 SQL Server 的架构)或者会慢得多。一旦满足此限制,您要么必须将开发分支以单独支持 SQL Server 和 SQL Server CE,要么必须做出妥协。
【讨论】:
【参考方案3】:您可以先使用代码在 SqlExpress 中生成表。然后在服务器资源管理器中,您可以访问 sqlexpress mdf。右键单击并单击发布到提供者。使用脚本文件选项。表格和所有表格都可以导出为 sql 脚本。然后,sql 脚本可以针对 Sql Server 2008 运行,以在您的 sql server db 中创建表。
【讨论】:
我很好奇...你是否因为没有读懂你的想法而否决了受访者?如果答案在当时措辞的问题背景下有用,我认为未能预见到您未说明的需求不值得投反对票。 这就是我想知道的。原标题与从 CE 迁移到 R2 以及我理解的问题有关。以上是关于将 EF 模型从 SSCE 4.0 切换到 SQL Server 2008 R2的主要内容,如果未能解决你的问题,请参考以下文章