【问题标题】:Linq-to-SQL database file emptyLinq-to-SQL 数据库文件为空
【发布时间】:2012-08-17 09:01:09
【问题描述】:

我是 stackoverflow 的新手,我搜索了整个网站和 msdn,但一无所获。我希望你能帮助我!

我想在.sdf 文件中拥有一个 Linq-to-SQL 数据库。于是我在ORM设计器中为Linq-to-SQL设计了数据库sheme,并编写了如下代码:

DataShemeDataContext context = new DataShemeDataContext("Data Source=database.sdf");
if (!context.DatabaseExists())
  context.CreateDatabase();
Console.ReadLine();

我的问题如下:

  • 当我运行程序并按 Enter 键退出时,一切正常
  • 但是如果我点击控制台窗口顶部的“X”按钮,数据库文件只有 20kb 大小(而不是 84kb)并且是空的。

使用这条线:

context.SubmitChanges();

没有区别。

希望你能帮帮我!

【问题讨论】:

  • 尝试等待一段时间,然后用“x”关闭控制台 - 我想知道 CreateDatabase 调用是否可能是异步的,但我不希望它是......不太熟悉使用 Linq2SQL...
  • 我试过等待,但它不会改变任何东西。

标签: c# linq-to-sql sql-server-ce


【解决方案1】:

用 using 包围你的代码:

using(DataShemeDataContext context = new DataShemeDataContext("Data Source=database.sdf"))
{
    if (!context.DatabaseExists())
        context.CreateDatabase();
}
Console.ReadLine();

这样你就可以确定你的上下文得到了正确的处理。

【讨论】:

  • 这很好用!所以我必须在每个使用上下文的方法中都这样做以防止损坏数据?
  • 由于DataContext实现了IDisposable,所以应该在不再需要的时候处理掉。
  • 适用于所有实现IDisposable的东西。虽然在特定情况下不Dispose() 可能是安全的,但这样做永远不会错,而且您通常不知道这些安全情况何时出现,所以假设您必须这样做。即使面对错误,mathieu 给出的格式也会发生。顺便说一句,您的应用程序第一次通过按键工作的唯一原因是正常关闭运行终结器,它将执行尚未完成的清理工作,但只是终止进程(当您关闭控制台时,控制台应用程序会发生这种情况)不会。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多