【问题标题】:Code first migration for a SQL Server CE database fileSQL Server CE 数据库文件的代码优先迁移
【发布时间】:2015-03-31 07:11:43
【问题描述】:

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 数据库文件的最简单方法是什么?

【问题讨论】:

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


    【解决方案1】:

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

    问题的重点是以前编写的旧 sdf(s),但与代码相比使用的是旧模型。 我决定不迁移旧文件(作为一种备份应用)。 只会在这些文件中进行读取。显然,将来可能会读取一次较新的 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 对其进行测试,因为我想避免“手动”引用,因为它必须被签入(不需要其他工作站的任何路径问题)。

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

    Database.CreateIfNotExists() 已应用。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      • 1970-01-01
      • 2016-11-24
      • 1970-01-01
      • 1970-01-01
      • 2019-05-29
      • 1970-01-01
      相关资源
      最近更新 更多