SQL Server Compact - 架构管理

Posted

技术标签:

【中文标题】SQL Server Compact - 架构管理【英文标题】:SQL Server Compact - Schema Management 【发布时间】:2009-03-31 03:12:24 【问题描述】:

我一直在寻找一个好的解决方案来实现在SQL Server Compact 3.5 数据库上管理架构的想法。

我知道在SQL Server Express、SQL Server Standard、SQL Server Enterprise 上管理架构的几种方法,但精简版不支持使用相同方法所需的必要工具。

有什么建议/提示吗?


我应该将其扩展为适用于 100 多个具有包装软件的客户。随着系统的变化,我需要将更新脚本与新的二进制文件一起发布到客户端。我一直在寻找一种体面的方法来发布它,而不必只给客户一个脚本文件并说“在 SSMSE 中运行它”。大多数客户都做不到这样的野兽。

我的一个朋友披露了一个关于如何处理我的任务中的 SQL Server 部分的部分脚本,但从未在 Compact Edition 上工作过。看来我得靠自己了。

我认为我已经决定要做的,并且需要一个“极客周”来完成,是编写某种工具,就像 WiX 和 NAnt 的工作原理一样,这样我可以只写一个过分热心的 XML 文档来处理这项工作。

如果我认为值得,我会在 CodePlex 和/或The Code Project 上发布它,因为我已经稍微使用过这两个网站来更好地理解我过去所做工作的概念,并且我认为回馈一点可能是值得的。


2010 年 5 月 3 日编辑:

如果有人愿意“命名”该项目,我会将我为 MS SQL 编写的肮脏/讨厌的版本上传到 CodePlex,以便我们可以开始破解 SQL Compact 的版本。虽然,我认为在我计划的初始应用程序的下一个版本中,我将放弃 SQL Compact,而只使用 XML 文件进行存储,因为该软件正在从可安装包转换为 Silverlight 应用程序。 Silverlight 只是提供了更好的访问策略。

【问题讨论】:

【参考方案1】:

我目前正在调查Migrator.Net。 这允许您直接在 C# 中将更改写入数据库,称为迁移。 这些迁移可以包含从简单的表添加/删除、列修改到复杂的数据更新代码的所有内容。

当您的应用程序启动时,它可以验证数据库当前的版本,并应用所需的任何迁移以使其保持最新状态。这一切都是自动处理的。运行此更新的代码很简单:

Assembly asm = Assembly.Load("LocalModels.migration");
Migrator m = new Migrator("SqlServerCe", "Data Source=LocalModels.sdf", asm, false);
m.MigrateToLastVersion();

我在 Compact 支持方面遇到了一些小问题(它假定默认架构是 dbo)。但我认为修复它们不会太难。

【讨论】:

考虑到它看起来是一个独立于数据库的解决方案,总而言之,这非常酷。我可能确实需要看看那个。 我使用 Migrator.Net 已经有一段时间了。该项目已被放弃,但对我来说效果很好。我做了一些更改,其中大部分是针对特定项目的。用 Compact 修复 bug 确实很容易,尽管从那时起我已经迁移到 SQLite。如果对某人有用,我可以将我的更新发布到 github。 想知道它目前如何与 PostgreSQL 一起工作,因为这就是我这些天正在使用的数据库平台。认真考虑自己写,所以这不是 NIH 的解决方案,导致的问题多于解决的问题。 我不知道它对 PostgreSQL 的支持如何。我建议从 Migrator.Net 开始并从中构建你需要的东西。这不是一个复杂的项目,代码干净简单。以它为基础可能比从头开始自己创建要容易得多。 使用 FluentMigrations 结束,如果我理解正确的话,就是重新启动 Migrator.NET。现在我已经熟悉它了,它是一个令人印象深刻的工具。【参考方案2】:

一些随机的想法(虽然我不确定我能完全回答)

    Microsoft Sync Framework 是一种选择。一旦您在第一次部署后(这似乎工作正常),我还没有机会完全了解它可以做什么。有一个 MSDN 站点here

    您可以在移动设备上执行脚本,但不能通过 SQL Management Studio 之类的工具执行,因此理论上您可以管理/维护 T-SQL 脚本,但缺点是 T-SQL 会很复杂( CE 支持的语句)并且我不知道“自动化”执行的方法 - 但同步框架可能会提供一些答案..

【讨论】:

使用同步框架...即在完整的 SQL 服务器副本和数据的卫星副本之间移动数据。我的观点是,随着软件的发展,移动开发人员如何处理数据库更改? 您也可以使用 AFAIK 处理架构更改 你“可以”,但对于 Fx 的工作方式来说,这是一个非常混乱的提议。要实际进行架构更改,取决于您正在做什么,您必须使用新架构重新创建表,将数据从旧表移动到新表,删除现有表,然后重命名新表。 :( (继续)...这对我来说不合理,至于我需要做的一些架构更改,它会将整个表标记为需要同步...而我没有同意这是一个不错的解决方案。我需要它来运行拨号/3G 卡管道,所以我希望尽可能保持精简。【参考方案3】:

如果您的一个关键标准要在一个小管道上高效工作,那么您唯一真正的选择是存储一个 DB Schema 版本(可能以某种方式与检查到您的 CMS 的脚本相关联)以及何时更新需要时,更改脚本通过网络发送并按顺序应用。您可能希望在您的数据库以及正在应用的这些脚本中保留一个日志,以便您可以优雅地处理断开连接、重新启动和其他可能令人讨厌的问题。

【讨论】:

【参考方案4】:

SQL Server Management Studio 对您有用吗?http://technet.microsoft.com/en-us/library/ms172933.aspx

【讨论】:

Damian.. 我不认为你已经阅读了这篇文章......也许我需要更清楚地说明......我需要向 100 多个客户发布更新脚本...... . 我需要一种应用程序可以为我处理更新的方法。实际上,我已经决定使用 Xml 构建我自己的方法,这样它的性能就像你在 nAnt 和 WiX 等工具中所拥有的一样。真是糟透了,以前从来没有人这样做过……我不能只是偷看副本,编辑以供我使用,然后就完成了。 @RichardB 我的答案是在之前添加的,您修改了您的问题,提到您需要在 100 多台机器上执行此操作,所以是的,我做到了 阅读帖子。我通常不会回复这样的评论,但结果我似乎收到了几票反对票,至少可以说这很烦人。 道歉。我得到了同样的东西,而且一定没有意识到这一点。你知道我可以用什么方法来清除上面的评论,以免你被烫到吗?我自己也遇到过一两次。 其实我放弃了当时写的东西,转而使用 Fluent Migrator。很棒的项目,它可以满足我 99% 的需求。我不得不捏造一些他们提出的用例来做一些项目,但不多。你应该在 github 上查看它。老实说,我已经为 SQLite 完全放弃了 SQL Compact,甚至可能为了 NOSQL 解决方案而放弃了 SQLite。

以上是关于SQL Server Compact - 架构管理的主要内容,如果未能解决你的问题,请参考以下文章

带有 Visual Studio 2008 的 SQL Server Compact

XamarinSQLite教程下载安装SQLite/SQL Server Compact Toolbox

如何从 .NET 应用程序连接到 SQL Server Compact?

VS 2010 SQL Server Compact 现在在数据库表编辑视图中添加

在 Visual Studio 2010 C# 中不允许访问数据库文件 (SQL Server Compact)

MS Sync/SQL Server Compact 代码在最新版本 SQL Compact 3.5 中失败