SQL 服务器 CE 数据库文件的代码优先迁移

Code first migration for a SQL Server CE database file

使用

MigrateDatabaseToLatestVersion。 SQL Server Express 中存储的数据库已更新。

当使用有效路径和文件名打开本地存储的 .sdf 文件(SQL 服务器 CE 数据库)时,该文件不会更新。

Database.SetInitializer(new MigrateDatabaseToLatestVersion<DTDataContext, Configuration>()); 
var connection = DTDataContext.GetConnectionSqlServerCE40(fullPathName);

dataBaseContext = new DTDataContext(connection, true);
dataBaseContext.Database.Initialize(true);

MigrationHistory 条目将在 SQL Server Express 中创建,而不是在本地 SQL Server CE 数据库文件中。

更新本地 SQL 服务器 CE 数据库文件的最简单方法是什么?

经过几次实验,找到了一个合适的解决方案(符合我的目的)。

问题集中在以前编写的旧 sdf,但与代码相比,模型较旧。 我决定不迁移旧文件(作为一种备份应用)。 只会在这些文件中进行读取。显然,更新的 sdf(s) 将来可能会被读取一次,但这没什么大不了的。 在读取可能不存在的实体的内容(在 sdf 中)之前,将通过 SqlQuerycount(*).

检查它
        [System.Diagnostics.CodeAnalysis.SuppressMessage( "Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes" )]
        private bool TestIfTableExists( string tableName, DTDataContext dataContext )
        {
            try
            {
                int cnt = dataContext.Database.SqlQuery<int>( "select count(*) from " + tableName ).First();
                return cnt > 0;
            }
            catch( Exception ex ) { /*available SqlCeException assembly does not fit --- table does not exist*/ return false; }
        }

顺便说一句,当使用 SqlCeException (v3.5) 时,可以通过程序集搜索作为参考提供,上述情况将失败(=未处理的异常!)。没有用 v4 测试它,因为我想避免 'manual' 引用,因为它必须被签入(不需要其他工作站的任何路径问题)。

关于编写 sdf: 当用当前模型写一个新的sdf时,这根本不是问题。

Database.CreateIfNotExists() 已应用。

就我而言,没有必要更新 sdf --- 并且没有找到快速解决方案。