从 SQL Server CE 切换到 SQL Server Express 实体问题

Posted

技术标签:

【中文标题】从 SQL Server CE 切换到 SQL Server Express 实体问题【英文标题】:Switching from SQL Server CE to SQL Server Express entity issue 【发布时间】:2011-12-03 03:40:26 【问题描述】:

我的应用程序使用 SQL Server Ce 作为数据库和实体框架作为 ORM。 现在我正在尝试切换到 SQL Server Express,但我在这样做时遇到了麻烦。

更新

所以在敲了 3 个小时之后,我终于发现你不能使用从 SQL Server CE 数据库生成的实体模型来对抗 SQL Server(在我的例子中是 Express 版本)。

我使用 Diff 程序查看为两个数据库生成的文件 (Designer.cs),我注意到文件中有这些差异:

SQL Server CE                          SQL Server 
FK__Download__000000000000003F         FK__Download__PlaneI__0519C6AF 

所以我必须创建两个实体模型,但是如何在我的程序中在两者之间进行互换呢?

如果我创建两个实体模型,我将拥有两个具有相同对象名称的类。

提前致谢

【问题讨论】:

【参考方案1】:

EDMX 文件实际上由三部分组成。

CSDL,您的概念模型 SSDL,存储模型 MSL,这两者之间的映射。

通常这三个部分作为资源嵌入到您的程序集中,您使用的连接字符串告诉运行时在该程序集中查找它们。

但是,您可以使用物理文件并将它们部署到您的应用程序中。通过这种方式,您可以为特定数据库使用相同的 CSDL,但使用不同的 SSDL/MSL 集。通过这种方式,您可以针对 SqlCE 数据库和 SQL Server 数据库重用您的实体模型。

Here you can find a blog post about swapping EF metadata

【讨论】:

感谢 Kort 的回答,但不幸的是,在这种情况下这不起作用。当我更改连接字符串 + ssdl 文件中的信息以反映使用 Sql Express 时,尝试查询数据时出现奇怪的异常。使用 Sql Ce 创建的实体类与使用 Sql Server 创建的实体类不同。就像我上面提到的,查看自动生成的实体类,我发现这两个类有很多不同。

以上是关于从 SQL Server CE 切换到 SQL Server Express 实体问题的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 代码将 SQL Server CE 迁移到 SQL Server 2012 Express

需要使用 SQL Server CE 迁移到 ANYCPU

SQL Server 2008 到 SQL Server CE (Windows Phone 7)

将架构从 SQL Server 数据库传输到 SQL Server CE 数据库的简单方法?

从 Win CE 设备到 SQL Server 2008 R2 的 SQL 复制

将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0