目前,通过SQL Server Management程序对数据库进行了更改。如果表更改,则运行sqlmetal以重新生成linqtosql类并继续开发。但是,这会使部署变得困难,因为您必须通过并手动更新部署数据库(以及开发周期中使用的任何其他数据库)。如果我们可以使用C#来生成这些更改将会很好,因为它有助于消除人为错误,并具有能够将数据库结构保留在git中的额外好处。现在,数据库的唯一表示形式是生成的linqtosql类。
我一直在寻找一个可以处理这类事情的好库,但主要的解决方案似乎是:保留一个sql生成脚本,或者在可以运行的C#类中嵌入sql以对其进行更改数据库。这两种情况似乎都是非常不理想的情况,因为你失去了C#提供的优秀强类型。似乎应该有一种方法可以使用纯C#来实现这一点。
我已经看到了使用实体框架和linqtosql从POCO生成数据库等事情的提示,但我很难找到使用它的具体示例。另外,在初始表生成之后,我还无法发现它们是否具有优雅(即数据保留)方式来处理对数据库的更改。
是否有任何项目可以解决这个问题?
答案 0 :(得分:5)
有几种工具可以帮助您进行数据库的架构(和数据)迁移:RikMigrations,Migrator.Net和Machine.Migrations。希望有所帮助。
Wizardby看起来也很有希望:它提供了数据库无关的DDL脚本以及不同版本的模式之间的自动迁移。
答案 1 :(得分:2)
VS2010可以通过数据库项目对数据库模式进行版本控制。还有其他用于数据库开发的工具可以提供版本控制,您需要搜索以查找它们并比较价格。
答案 2 :(得分:2)
我更喜欢使用sql脚本的版本。工作得很好,免费,支持更新,易于版本,适用于传统的源代码控制方法。
首先,
在进行更新时,
答案 3 :(得分:2)
听起来您需要像Migrator.NET这样的工具来管理数据库迁移。我们使用来自我们网站启动的调用来根据任何特定版本的需要迁移数据库。
我已经玩弄了创建cleaner interface的想法,并且有一天希望能够实现它,但其他优先事项已经推动了这一点。目前我们在迁移中使用原始sql字符串,因为没有sybase驱动程序实现(除了我编写的用于管理版本控制表的非常难看的黑客攻击之外)。
答案 4 :(得分:1)
Redgate软件提供的功能可能对您非常有用。它被称为SQL Packager,它的工作做得很好。
特点:
- 在您的客户群中轻松推出数据库更新
- 准确,快速地编写和压缩您的架构和数据
- 将任何预先存在的SQL脚本打包为.exe,或作为C#项目启动
- 简化SQL Server 2000,2005和2008的部署和更新
他们还提供SQL Source Control,这也可能有助于保持事情的美好和轻松。
答案 5 :(得分:1)
作为MadBoy的插件,SQL Packager还可以将该包作为C#项目启动。
Red-Gate的SQL Compare也非常出色,正如SO上的一些横幅所示,还有新的SQL Source Control。
然后他们有SQL Comparison SDK。
答案 6 :(得分:1)
这里的诀窍是依赖数据库作为Linq架构的单一事实来源,而不是生成的类。
我们在开发商店广泛使用Linq到SQL,工作如下:
1.从版本控制(基线)创建数据库(工作副本)
2.以您喜欢的方式修改数据库
3.从(工作)数据库生成Linq to SQL类
4.创建补丁以将基准数据库更新为工作副本
5.签入并与所有开发人员共享这些补丁。
要快速简便地生成基线和工作副本数据库,请尝试使用DBSourceTools。 http://dbsourcetools.codeplex.com
玩得开心。