dan*_*ord 26 sql-server entity-framework sql-server-express sql-server-ce sql-server-2012
我有一个小项目,在一台计算机上有1个用户.数据库相当小(可能少于1 MB的数据).我计划为该项目使用WPF和Entity Framework.
我为我的项目提出了2个潜在的数据库解决方案:SQL Server CE和SQL Server Express LocalDB(使用SQL Server 2012).我从未使用过任何这些,我更习惯使用完整的SQL Server 2008安装.
我也希望它很容易安装在客户端上.理想情况下,我想将一堆文件放在一个文件夹上(以及我的.exe文件).
那么这里有人可以建议我使用最好的技术吗?
谢谢!
mar*_*c_s 35
请参阅SQL Server Express本地数据库运行时简介演示 - 提供了一个很好的概述.
LocalDB的巨大好处在于它是真正的SQL Server - 它是SQL Server Express的特殊版本,但它基本上支持"真正的"SQL Server所具有的一切 - 空间数据类型,存储过程 - 您可以命名它.
另一方面,SQL Server Compact Edition是一个非常小规模的版本 - 不支持许多功能和数据类型.它更小,更"敏捷" - 但它缺乏很多冲击力.
我个人会选择SQL Server Express与SQL Server CE 4上的LocalDB运行时 - 除非你特别需要微小的SQL Server CE(例如在移动设备上).
另请参阅ErikEJ优秀的Everything SQL Server Compact网站上的SQL Server CE 3.5,CE 4.0,SQL Server Express 2008 R2和SQL Server 2012 Express LocalDB之间的比较.
Eri*_*kEJ 28
这取决于,但根据您的要求(即非常少量的数据和XCopy安装),您唯一的选择是SQL Server Compact,因为SQL Compact在磁盘上的占用空间大约为18 MB,而使用LocalDB为160 MB,而LocalDB需要管理员安装(仅作为MSI) - 但如果SQL Server兼容性更重要,则LocalDB是最佳选择(如marc_s注释)
忘记所有含糊的“它更容易”、“它更小”、“它缺乏冲击力”或“它更轻”的答案(没有冒犯性),我认为在面临选择时,应该关注两者之间的主要区别:
是否作为申请流程的一部分运行有很多影响,可能应该在单独的问题中进行探讨。
最明显的一点是,如果您需要使用进程内 DBMS(例如 CE)从多个应用程序访问数据库,则所有应用程序都将使用自己的 CPU 时间直接访问数据库文件。同步它们真的很难,意识到这一点有助于理解为什么 CE 的功能较少(以及许多其他东西)。
另请注意,虽然人们可能会担心运行相同 CE 代码的多个进程可能会占用比所需更多的内存,但请记住,操作系统足够聪明,可以在多个进程之间共享其页面缓存中的页面,因此这真的不是问题.
LocalDb 只是一种以每个用户为基础自动管理普通 Express 实例的方法(它与 SQL Server Express 没有什么不同,它是一回事)。
我真的不想在这里和ErikEJ一起去.我没有声誉来表达他的答案,但鉴于你所要求的目标SQL CE真的是最快的进出.由于你使用EntityFramework(不支持过程T-SQL,但是如果你使用EF和Lambda和LINQ,那么不会支持marc_s在SQL CE的"缺失特性"VS LocalDB上提供的许多比较问题链接)真的是一个问题).