3

基本的に、私はLINQデータベースコンテキストとそのモデルを持っています。通常どおり、DBが存在しない場合はSQLコンテキストでDBを作成します(コンテキストはシングルトンであり、それにアクセスするたびに、これがチェックされます)。

最初の起動時にDBにデータを追加すると、すべてがうまく機能します。ただし、アプリの最初の起動時にデータを挿入しないと、連続して起動すると次のようになります。

SqlCeException:指定されたテーブルが存在しません[TableName]

具体的に説明できるかどうかはわかりませんが、最初の起動時にデータを挿入しないと、アプリの2回目の起動時にLINQクエリを実行するとすぐに例外が発生します。最初の起動時にデータを挿入した場合、アプリの残りの期間はすべて問題ありません。DBを作成してDBコンテキストを導入するのに、データを挿入しないのはなぜ悪いことなのでしょうか。

これが私のLINQDBモデルです。

最初の起動時にデータを挿入しなかった場合、2回目の起動時に例外が発生します。

また、テーブルがLINQに存在するかどうかを確認するためのAPI呼び出しがないことにも気付くので、「これは正常に機能するはずです」と想定する必要がありますが、そうではありません。

何か案は?ありがとう!:)

更新:アプリの最初の起動時にデータを挿入しない場合、実際にはテーブルが作成されないことを.sdfファイルの分析で確認しました。私の考えでは:

  • これはLINQ-to-SQLのバグです。テーブルが存在しない場合でもクラッシュすることはありませんが、テーブルを作成する必要があることはわかっています。または、ケースに対処し、データが挿入されたときにのみテーブルを作成します。
  • 最初の起動時に常にダミーデータをSQLに挿入する必要があります。または...
  • テーブルが存在するかどうかを確認し、存在しない場合は、LINQ-to-SQLにテーブルを作成させることでテーブルに反応します。しかし、どのように?
4

1 に答える 1

1

私もこの問題に対処しました、私はそれをこのように修正しました:

データコンテキストを取得します。

dbDataContext = new DBDataContext(DBConnectionString);

if( dbDataContext.DatabaseExists() == true)

//次に、エンティティを取得しようとします:

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

//エンティティから要素を取得しようとします:

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

entities.GetEnumerator();「テーブルが見つかりません」という例外が常に発生します。

とにかくDBが空なので、try / catchを使用し、catchスコープでdbを削除して再作成します:)

dbDataContext.DeleteDatabase();
dbDataContext.CreateDatabase();
dbDataContext.SubmitChanges();
于 2012-09-11T13:47:24.900 に答える