如果删除了数据库文件,则#DataContext CreateDatabase不起作用

时间:2017-06-27 06:25:28

标签: c# sql database datacontext

我创建了一个应用程序,它使用本地数据库,该数据库存储在AppData文件夹中。我创建了一个DataContext来获取数据:

private NorthWindDataContext northWindDataContext = new NorthWindDataContext(connectionString);

每次启动应用程序时,都会检查数据库是否存在。如果它不存在,它应该创建数据库:

DB:
if (!northWindDataContext.DatabaseExists())
{
    try
    {
        northWindDataContext.CreateDatabase();
    }
    catch (Exception ex1)
    {
        try
        {
            northWindDataContext.DeleteDatabase();
        }
        catch (Exception ex2)
        {

        }
    }
    goto DB;
}

这样可以正常工作,但如果我删除目录中的文件并再次启动应用程序,则会在使用CreateDatabase创建数据库时获得以下Exeception:

  

"数据库' C:\ Users \ me \ AppData \ Local \ Test \ Northwind.mdf'已经存在。选择其他数据库名称。"

如果CreateDatabase - 方法失败,则应使用DeleteDatabase删除数据库(实际上不存在)。这不是应用程序抛出的异常。然后它应该尝试再次创建数据库。现在,应用程序不会在CreateDatabase处抛出Exeception,但它也不是创建的数据库文件。

如果用户删除了数据库文件,那么每次启动应用程序时都会发生这种情况,那么我做错了什么或者有什么遗漏?

1 个答案:

答案 0 :(得分:0)

数据上下文默认使用localdb的一个实例...删除数据库文件(.mdf文件)并不意味着数据库不存在于localdb的这个实例中了。您可以通过删除任何.mdf文件并查询服务器的主数据库来确认

select * from sys.databases

你会发现即使在删除文件后数据库已经存在,这就是为什么如果你试图创建数据库而导致数据库退出错误的原因,并且可能条件!northWindDataContext.DatabaseExists()赢了。遇到因为localdb认为它仍然有db

我尝试打开SQL Server Management Studio并从那里删除数据库然后我找到了一个找不到文件的错误,此时localdb注意到数据库已被删除,并且已将其从对象资源管理器和{{{ 1}}查看