2012-01-15 7 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の列をintdouble、およびDateTimeです。私はClearDatabase()コールせずにアプリケーションを実行すると、私はすぐに私はfooContext.Itemsにアクセスしようとして、次のエラーを取得する:

指定された表が存在しません。 [フー]

ここで何が起こっているの?私がアプリを新しくインストールすると、すべて正常に動作します。

+0

「SubmitChanges();」とは何ですか?データベースがすでに存在する場合、その行は実行されません。 –

答えて

1

Linq To SQLのDataContextのバッキングテーブル構造は、CreateDatabase()が呼び出されたとき、またはDatabaseSchemaUpdater.Execute()メソッドを通じてスキーマを明示的に更新するときにのみ作成されます。

私は、あなたのケースで何が起こっているのか疑うあなたはしかし、あなたが実際にDatabaseSchemaUpdaterを経由してスキーマを更新していない、あなたのデータモデルに新しいエンティティタイプを追加しているということです。これにより、Linq To SQLはデータベースエンジン内にまだ作成されていないテーブルを参照するクエリを生成します。

私はあなたのアプリケーションのスキーマ変更を処理できるようにしたい場合は、DatabaseSchemaUpdaterクラスをチェックアウトすることをお勧めします。

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

関連する問題