鉴于SQL Server 2012 的 LocalDB的现存定义为
SqlLocalDB 是 SQL Server 2012(及未来版本)的本地低开销数据库引擎,它允许开发人员专注于开发而不是实例配置或安全性。
我很好奇从 LocalDB 中的开发到生产实例的路径会是什么样子,特别是考虑到用户实例(ca. SQL 2005)的问题,并试图将其中一个提升到生产中,开发人员会忘记哪个实例他们实际上是在努力推广。在StackOverflow上快速搜索可以发现各种形式的此类问题。在这种情况下,LocalDB 是否会改进/简化部署?
...
老实说,差别不大。虽然
User Instances
这不再是一个因素,但开发人员仍然很容易创建一堆 SqlLocalDb 实例并忘记哪一个拥有真实的“真实”版本。LocalDb 所做的是消除了设置完整的基于服务的 SQL Server 实例(Express 或其他)的需要,并降低了安全模型的复杂性。在源代码控制和推广方面实施良好的开发实践仍然取决于开发人员或团队。如评论中所述,有几种方法可以将代码从本地实例提升到生产环境(希望首先通过某种 QA/测试系统):
(我故意不使用分离/附加,因为备份/恢复更安全。如果 .mdf 文件在分离期间或分离之后发生某些事情,则使用分离,您现在拥有数据库的零副本。如果备份出错,您仍然有来源。)
其中任何一个是否或多或少容易出现与今天相同的问题,更多地取决于团队纪律和既定程序,而不是他们使用 Express 还是 LocalDb 进行本地开发。恕我直言。
LocalDb 通过用户实例提供的好处是,如果您连接到 LocalDb 的单个实例,您不会遇到每次使用
AttachDbFileName
时都会获得数据库的新副本的特定情况。最有问题的部分是你在一个实例中更改了一个表,然后从你的应用程序中得到一个错误,因为它连接到一个没有你的表更改的副本。正如您所指出的,这导致了关于 SO 的无休止的混乱和类似问题。事实上 SqlLocalDb 仍然支持AttachDbFileName
,但我认为它会非常不常用,如果有的话。使用 LocalDb ,您遇到这些问题的可能性较小,但它们仍然存在。它是一种具有一些优点的不同工具,但仍然可能被不当使用。