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数据库文件的最简单方法是什么?
答案 0 :(得分:0)
经过几次实验后,找到了一个合适的解决方案(这符合我的目的)。
问题主要集中在以前编写的旧sdf,但与代码形成鲜明对比的旧模型。
我决定不迁移旧文件(作为一种备份应用)。
只会在这些文件中进行阅读。显然,将来可能会读取一次较新的sdf,但这并不是什么大问题。
在阅读可能不存在的实体(在sdf中)之前,将通过SqlQuery
和count(*)
进行检查。
[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--并且找不到快速解决方案。