如何在 VS2008 和 SQL Server CE 上基于现有的 .sdf 文件创建空本地数据库

Posted

技术标签:

【中文标题】如何在 VS2008 和 SQL Server CE 上基于现有的 .sdf 文件创建空本地数据库【英文标题】:How to create empty local databases based on an existing .sdf file on VS2008 and SQL Server CE 【发布时间】:2009-01-21 10:14:07 【问题描述】:

我想使用 Visual Studio 2008 IDE 为 SQL Server Compact 3.5 数据库编辑我的本地数据库架构。但是,文档和 UI 中的所有内容似乎都假设应用程序/程序集只想使用单个数据库,并且从不希望基于现有架构创建新数据库。

我希望能够使用可视化工具编辑数据库架构,然后拥有一种基于编辑后的架构创建新数据库文件的机制。这样,我的应用程序创建的每个文档都将存储在它们自己单独的数据库文件 (.sdf) 中。此外,出于单元测试的目的,我希望能够创建空的临时 .sdf 文件,以便在空数据库上运行我的单元测试。

我知道如何使用现有架构创建新的空数据库的唯一方法就是将我的主 .sdf 文件复制到一个新文件中。

使用 C# 代码创建新 .sdf 文件的推荐方法是什么?即,如何实现 MyModel.Create("foo.sdf") 以便它使用我在 Visual Studio 中创建的架构创建 .sdf 文件。

编辑:经过长时间的调查,我最终完全放弃了 VS2008 本地数据库 .sdf 编辑器,并开始使用 LINQ-to-SQL 创建新的 .sdf 文件。我现在只指定一堆 C# 类,注释它们以使用 LINQ-to-SQL 并通过调用我的 DataContext 的 CreateDatabase 方法创建新的数据库文件。 MSDN上有一个很好的文档:How to: Dynamically Create a Database (LINQ to SQL)

【问题讨论】:

【参考方案1】:

创建一个“model.sdf”数据库,其中包含架构和可能需要的初始数据。如果你想创建一个新的数据库,你可以从这个模型创建一个副本。

您也可以create the Sql-DDL from an existing database (alternative link),然后创建一个空数据库并在其上执行此 SQL。这会慢很多。

【讨论】:

所以在 C# 代码中,当我想要一个新实例时,我只是使用文件操作将“model.sdf”复制到“foo.sdf”?没有“从 读取模式,然后创建一个新的 .sdf 文件”的 API? 我已经编辑了我的答案以包含一个解决方案。仍然认为副本将是最简单和最快的。 感谢您的回答!有没有一种惯用的方式将 .sdf 文件包含在 .net 程序集中?理想情况下,我的数据模型 dll 的依赖者根本不需要知道这个 .sdf 文件。 回应我上面的评论:我想一个简单的方法是将它作为资源链接到 dll 中。这样模型就可以方便的存储在dll中,不需要单独安装。 对于安装来说,比较简单,但是以后只更新数据库会比较困难。

以上是关于如何在 VS2008 和 SQL Server CE 上基于现有的 .sdf 文件创建空本地数据库的主要内容,如果未能解决你的问题,请参考以下文章

为啥安装的SQL SERVER 2008中SQL SERVER 服务只有1个

如何使用VS2008中集成的SQL Server 2005 Express?

C# windows应用程序打包 (VS2010+SQL Server 2008)

sqlserver2008数据库如何以web形式操作

vs 和sql server 2008 产生两个实例(SQLEXPRESS和MSSQLSERVER),在VS中手动链接时出现错误代号:26

如何将数据库sql server2008中的数据库生成脚本输出