2012-01-15 19 views
0

我试图在Windows Phone芒果使用SQL Server CE。这里是我的DataContext的SQL Server CE表中找不到错误

public class FooDataContext : DataContext 
{ 
    private static readonly string DB_CONNECTION_STRING = "Data Source=isostore:/foo.sdf"; 

    // Pass the connection string to the base class. 
    public FooDataContext() : base(DB_CONNECTION_STRING) 
    { } 

    // can this be a property? 
    public Table<Foo> Items; 

    public void ClearDatabase() 
    { 
     if (DatabaseExists()) 
     { 
      DeleteDatabase(); 
     } 
    } 

    public void EnsureDatabaseExists() 
    { 
     if (!DatabaseExists()) 
     { 
      CreateDatabase(); 
      SubmitChanges(); 
     } 
    } 
} 

在主页面的构造,我打电话EnsureDatabaseExists()。如果我已经改变了模式,我还包括一个电话ClearDatabase()

//fooData.ClearDatabase(); 
fooData.EnsureDatabaseExists(); 

Foo的列intdoubleDateTime。当我运行没有ClearDatabase()调用应用程序,我只要我尝试访问fooContext.Items收到以下错误:

指定的表不存在。 [富]

这到底是怎么回事?如果我全新安装应用程序,一切正常。

+0

这是什么'的SubmitChanges();'怎么办?如果数据库已经存在,那行就不会被执行。 – 2012-01-15 02:46:24

回答

1

只有在调用CreateDatabase()或通过DatabaseSchemaUpdater.Execute()方法显式更新架构时,才会创建Linq To SQL DataContext的支持表结构。

我怀疑什么是你的情况下发生的,是要添加一个新的实体类型数据模型,但你实际上并没有更新通过DatabaseSchemaUpdater架构。这导致在LINQ to SQL生成一个查询其引用了尚未在数据库引擎中创建一个表。

我会建议您检查出DatabaseSchemaUpdater类,如果你想能够处理应用程序中的架构更改。

http://msdn.microsoft.com/en-us/library/hh133477(v=VS.95).aspx