代码首次迁移SQL Server CE数据库文件

时间:2015-03-31 07:11:43

标签: entity-framework ef-code-first sql-server-ce sql-server-express

使用

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

使用有效的路径和文件名打开本地存储的.sdf文件(SQL Server 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 Server CE数据库文件的最简单方法是什么?

1 个答案:

答案 0 :(得分:0)

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

问题主要集中在以前编写的旧sdf,但与代码形成鲜明对比的旧模型。 我决定不迁移旧文件(作为一种备份应用)。 只会在这些文件中进行阅读。显然,将来可能会读取一次较新的sdf,但这并不是什么大问题。 在阅读可能不存在的实体(在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; }
        }

btw当使用SqlCeException(v3.5)时,可以通过程序集搜索作为参考提供,上述情况将失败(=未处理的异常!)。没有使用v4进行测试,因为我想避免使用“手动”参考,因为必须检查它(不需要与其他工作站有任何路径问题)。

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

Database.CreateIfNotExists()已应用。

在我的情况下,没有必要更新sdf--并且找不到快速解决方案。