答案1
在 Microsoft Visual Studio 2017 中创建 SQL Server Compact Edition 数据库文件
微软将不再支持 Visual Studio 中的 SDF 文件
微软似乎已弃用SQL Server Compact建议使用SQL Server Express而是向前迈进。
文件扩展名为SQL Server CompactDB 数据文件是 SDF,因此只计划使用SQL Server Express以及其 DB 数据文件的相关 MDF 扩展。
发布者斯里尼[MSFT] 2013 年 2 月 18 日上午 11:52
SQL Server compact 版本处于弃用模式,近期没有计划发布新版本。最新版本 SQL CE 4.0SP1(以及仍处于支持周期的早期版本)将在其整个生命周期内继续受到支持,Microsoft 承诺修复在这些版本中发现的任何重大生产阻碍问题。目前,我们认为此问题不属于该类别,因此我们将关闭此问题。
在台式机/笔记本电脑部署中,迁移到 SQL Server LocalDB/SQL Express 是许多当前用户的可行选择(http://msdn.microsoft.com/en-us/library/hh510202.aspx)
弃用
2013 年 2 月,微软宣布 SQL Server Compact Edition 已被弃用。
尽管没有计划推出新版本或更新,但微软将继续通过其标准生命周期支持政策支持 SQL Compact。此支持将于 2021 年 7 月结束。
更多资源
答案2
SQLCE v4.0 仍然可用且发展迅速。您可以轻松地将其与任何版本的 Visual Studio 2019 一起使用。您甚至不必安装它 - 您可以将其作为私有部署分发,与您的应用捆绑在一起。
安装这个包,在您的项目中设置一些配置,然后就可以开始运行了。
它与 Entity Framework 6.x Code First Migrations 配合得很好。多年来,我的应用程序一直在使用它。我非常高兴。
这是我的数据上下文类的一个片段:
Partial Public Class Context
Inherits DbContext
Private Sub New(Connection As SqlCeConnection, LogSql As Boolean)
MyBase.New(Connection, True)
Dim sSessionSql As String
Database.SetInitializer(New CreateDatabaseIfNotExists(Of Context))
Database.SetInitializer(New MigrateDatabaseToLatestVersion(Of Context, Migrations.Configuration))
Me.Database.Initialize(False)
If Utils.Registry.LogSql OrElse LogSql Then
sSessionSql = String.Empty
Me.Database.Log = Sub(SqlCmd As String)
sSessionSql &= SqlCmd
EventLog.WriteEntry("SQL Log", sSessionSql, EventLogEntryType.Information)
sSessionSql = String.Empty
End Sub
End If
End Sub
...
End Class
如您所见,如果数据库不存在,它会在启动时创建一个新的数据库。
作为一个 ISV,如果我不得不强迫我的客户下载 +60MB 的安装程序来运行我的小型实用程序,我就会破产。