このコードを SqLite ファイル データベースで使用すると、問題なく動作します。
using (var ctx = new Test2010Entities())
{
string s = "CREATE TABLE 'Company' ([Id] integer PRIMARY KEY AUTOINCREMENT NOT NULL, varchar(50) NOT NULL);";
ctx.ExecuteStoreCommand(s);
ctx.Companies.AddObject(new Company { Code = "_1" });
ctx.Companies.AddObject(new Company { Code = "_2" });
ctx.SaveChanges();
foreach (var c in ctx.Companies.ToList())
{
Console.WriteLine(c.Code);
}
}
しかし、SqLite 'In Memory' データベース ( Data Source=:memory:;Version=3;New=True; ) でこのコードを実行すると、次の例外が発生します。
未処理の例外: System.Data.UpdateException: エントリの更新中にエラーが発生しました。詳細については、内部例外を参照してください。---> System.Data.SQLite.SQLiteException: SQL ロジック エラーまたは見つからないデータベースにそのようなテーブルはありません: Company
これは、VS 2010、EF 4.4.0.0、および sqlite-netFx40-setup-bundle-x86-2010-1.0.84.0 でテストされていることに注意してください。
::: 更新 :::
Simon Svensson が示唆したように、他のコマンドよりも先に接続を開くと、次のようにトリックが実行されます。