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 中)之前,将通过 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; }
}
顺便说一句,当使用 SqlCeException (v3.5) 时,可以通过程序集搜索作为参考提供,上述情况将失败(=未处理的异常!)。没有用 v4 测试它,因为我想避免 'manual' 引用,因为它必须被签入(不需要其他工作站的任何路径问题)。
关于编写 sdf:
当用当前模型写一个新的sdf时,这根本不是问题。
Database.CreateIfNotExists() 已应用。
就我而言,没有必要更新 sdf --- 并且没有找到快速解决方案。
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 中)之前,将通过 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; }
}
顺便说一句,当使用 SqlCeException (v3.5) 时,可以通过程序集搜索作为参考提供,上述情况将失败(=未处理的异常!)。没有用 v4 测试它,因为我想避免 'manual' 引用,因为它必须被签入(不需要其他工作站的任何路径问题)。
关于编写 sdf: 当用当前模型写一个新的sdf时,这根本不是问题。
Database.CreateIfNotExists() 已应用。
就我而言,没有必要更新 sdf --- 并且没有找到快速解决方案。