Linq-to-SQL 数据库文件为空

Posted

技术标签:

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

我是 *** 的新手,我搜索了整个网站和 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... 我试过等待,但它不会改变任何东西。 【参考方案1】:

用 using 包围你的代码:

using(DataShemeDataContext context = new DataShemeDataContext("Data Source=database.sdf"))

    if (!context.DatabaseExists())
        context.CreateDatabase();

Console.ReadLine();

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

【讨论】:

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

以上是关于Linq-to-SQL 数据库文件为空的主要内容,如果未能解决你的问题,请参考以下文章

如何在LINQ-To-SQL中排除Contex.InsertOnSubmit()上的用户定义字段?

Linq-to-SQL 数据检索速度比较

带有 XML 数据库字段的 Linq-to-SQL —— 为啥会这样?

使用 Linq-to-SQL 的 ADO.NET 数据服务

通过 LINQ-to-SQl 加载数据集

Linq-to-sql 不产生多个外连接?