如果我不向数据库插入数据,则在重新启动时获取SqlCeException

时间:2012-09-08 12:18:55

标签: linq windows-phone-7 exception sql-server-ce

基本上,我有一个LINQ数据库上下文及其模型。通常,如果数据库不存在,我会在SQL上下文中创建数据库(上下文是单例,并且在每次访问时都会检查它)。

如果我在第一次启动时向数据库添加数据,那么一切都很顺利。但是如果我在第一次启动应用程序时没有插入任何数据,那么在连续启动时我会得到

  

SqlCeException:指定的表不存在[TableName]

我不知道我可以更具体地解释它,但是如果我在第一次启动时没有插入任何数据,那么每当我在第二次启动应用程序时执行LINQ查询时会立即出现异常< / strong>即可。如果我在第一次启动时插入了一些数据,那么应用程序的剩余时间一切正常。为什么创建数据库并引入数据库上下文但不插入任何数据会是一件坏事?

这是我的LINQ DB模型:

如果我在第一次启动时没有插入任何数据,我会在第二次启动时获得异常:

这也让我觉得没有API调用来检查LINQ中是否存在表,所以我不得不假设“这应该只是工作” - 但事实并非如此。

有什么想法吗?谢谢! :)

更新:我验证了分析.sdf文件,如果我在首次启动应用时没有插入任何数据,确实没有创建表格。我认为:

  • 这是LINQ-to-SQL 中的错误。如果没有表格,它不应该崩溃,但要知道它应该创建它们。或者处理案例并仅在插入数据时创建表。
  • 我需要在首次启动时将一些虚拟数据插入SQL,或者......
  • 检查表是否存在,如果不存在,则通过强制LINQ-to-SQL创建它们来对其做出反应。但是怎么样?

1 个答案:

答案 0 :(得分:1)

我也处理过这个问题,我已经用这种方式解决了这个问题:

获取数据上下文:

dbDataContext = new DBDataContext(DBConnectionString);

if( dbDataContext.DatabaseExists() == true)

//然后尝试获取一个实体:

System.Data.Linq.Table<Entity> entities = dbDataContext.Tablename;

//尝试从实体中获取元素:

IEnumerator<Entity> enumEntity = entities.GetEnumerator();

entities.GetEnumerator();将始终引发异常“未找到表格。”

只需使用try / catch并在catch范围内删除db并重新创建它,因为无论如何你的DB都是空的:)

dbDataContext.DeleteDatabase();
dbDataContext.CreateDatabase();
dbDataContext.SubmitChanges();