我将EF6与SQL Server Compact数据库,Code-First方法和MigrateToLatestVersion-Initializers一起使用。我还有两个使用相同数据库的DbContext派生类。编程语言是C#,IDE是Visual Studio 2013。
在应用程序启动时,我想检查给定的数据库文件是否有效。首先,我检查文件是否存在,但我还想检查文件是否是有效的数据库。
我的第一个方法是创建每个DbContext类的实例。但由于这不能访问数据库,我无法捕获任何意味着无效文件的异常。
但是当我调用访问数据库的函数时,如SomeContextEntities.ToList()
,我也不会得到任何异常,即使我检查的文件是一个简单的文本文档。我猜初始化程序只是覆盖无效的文本文件并创建一个新的数据库。
然后我尝试了SomeContext.Database.Connection.Open()
,希望该方法在数据库文件无效时抛出异常,但它不会,而ConnectionState只会更改为“open”。事实上,当我调用SomeContext.Database.Connection.Close()
时,以前的文本文件已被转换为空数据库文件。
同样SomeContext.Database.Exists()
显然只检查文件存在。
是否有(最好是低成本)方法来检查有效的数据库文件?