2012-01-15 33 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