我有一个从SQL Server CE 4.0数据库文件中读取的应用程序。
用户可以在启动时选择数据库。每个数据库都具有相同的模式,但数据不同。
鉴于我想确保他们不使用无效的数据库(或将应用程序指向word文件或其他内容),是否可以验证所选数据库的架构?
过去我使用ADO.net来检查每个表中的每一列是否存在但是当实体框架存在时,这看起来非常愚蠢。肯定在EF中必须有一些东西可以执行此操作,但我无法找到它。
我正在寻找一个比#34更健全的答案;运行查询,如果失败则数据库无效"因为可能存在许多其他原因导致此类查询失败
答案 0 :(得分:1)
EF中没有任何功能可以执行此操作。
您可以使用我的SQL CE Scripting API,可通过NuGet http://www.nuget.org/packages/ErikEJ.SqlCeScripting/
获取首次使用
DataSet GetSchemaDataSet(GetAllTableNames());
并保存并添加到您的应用中。
然后使用
DataSet GetSchemaDataSet(GetAllTableNames());
在已加载的数据库
上然后比较两个DataSet
DataSet dsDifferences = new Dataset();
dsOriginal.Merge(dsChanged);
dsDifferences = dsOriginal.GetChanges();
(如果dsDifferences有包含行的表,则存在差异)
我的库还有一个方法DetermineVersion(string fileName)来检查文件是否显示为有效的SQLCE文件。