11

SQL Server CE 4.0 を使用する ASP.NET MVC 3 Beta Web サイトを持っています。ScottGu の NerdDinner の例と私自身のコードの両方で、データベースにアクセスしようとするとすぐに次の例外が発生することがあります。

ファイルが既に存在します。別のデータベース名を使用してみてください。
[ ファイル名 = D:\Sourcecode\NerdDinner\NerdDinner\App_Data\NerdDinners.sdf ]

17行目: public ActionResult Index()
18行目: {
19 行目: var dinners = nerdDinners.Dinners の d から
20 行目: where d.EventDate > DateTime.Now
21 行目: d を選択します。

[SqlCeException (0x80004005): ファイルは既に存在します。別のデータベース名を使用してみてください。[ ファイル名 = D:\Sourcecode\NerdDinner\NerdDinner\App_Data\NerdDinners.sdf ]]
   System.Data.SqlServerCe.SqlCeEngine.ProcessResults(IntPtr pError, Int32 hr) +92
   System.Data.SqlServerCe.SqlCeEngine.CreateDatabase() +1584
   System.Data.SqlServerCe.SqlCeProviderServices.DbCreateDatabase(DbConnection 接続、Nullable`1 timeOut、StoreItemCollection storeItemCollection) +287
   System.Data.Objects.ObjectContext.CreateDatabase() +84
   System.Data.Entity.Internal.DatabaseOperations.Create(ObjectContext objectContext) +35
   System.Data.Entity.Infrastructure.Database.Create() +70
   System.Data.Entity.Infrastructure.CreateDatabaseOnlyIfNotExists`1.InitializeDatabase(TContext コンテキスト) +360
   System.Data.Entity.Infrastructure.Database.Initialize() +272
   System.Data.Entity.Internal.InternalContext.Initialize() +90
   System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +34
   System.Data.Entity.Internal.Linq.EfInternalQuery`1.Initialize() +140
   System.Data.Entity.Internal.Linq.EfInternalQuery`1.get_Provider() +29
   System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() +34
   System.Linq.Queryable.Where(IQueryable`1 ソース、Expression`1 述語) +63
   NerdDinner.Controllers.HomeController.Index() in D:\Sourcecode\NerdDinner\NerdDinner\Controllers\HomeController.cs:19

なぜこれが既存の .dbf ファイルで機能するのか、また不平を言うのかわかりません。デフォルトの動作を明示的に設定しようとさえしました

Database.SetInitializer(new CreateDatabaseOnlyIfNotExists<...>());

他の誰かがこれを経験しましたか?

  • Cassini を再起動しても違いはないようです。
  • このエラーを受け取った後に IE で更新を押すと、まったく同じページが正しく読み込まれます
4

5 に答える 5

8

このような古い質問を復活させて申し訳ありませんが、私は今日これを経験しており、CTP の古いバージョンをインストールする必要のない回避策を見つけました。

ブログ投稿の正しい URL はhttp://www.hanselman.com/blog/PDC10BuildingABlogWithMicrosoftUnnamedPackageOfWebLove.aspxです(ブログ投稿の約半分) 。

*AppStart_SQLCEEntityFramework.cs ファイルに移動し、DefaultConnectionFactory 行を次のようにします:*

Database.DefaultConnectionFactory = new SqlCeConnectionFactory( 
    "System.Data.SqlServerCe.4.0", 
    HostingEnvironment.MapPath("~/App_Data/"),"");

私の特定のデータベースは App_Data フォルダーに配置されていますが、あなたのデータベースがそうでない場合は、パスを適切に変更できるはずであり、それが機能すると想定しています。

お役に立てれば!

于 2010-12-20T12:21:46.460 に答える
3

これは最近発見されたバグのようです。 MSDN フォーラム

回避策は、SQL Server CE 4.0 CTP 1ダウンロードを再インストールすることです。

于 2010-10-15T22:09:29.833 に答える
1

今日、リリースされた MVC3 と NuGet でダウンロードした SQL Server CE 4.0 で同じ問題が発生しましたが、次の行のコメントを外すことで解決しました。

    DbDatabase.SetInitializer(new CreateCeDatabaseIfNotExists<MyContext>());

そして、MyContext を、models フォルダー内の DBContext から継承していたコンテキスト クラスに置き換えます。

于 2011-02-25T21:36:29.527 に答える
1

SQL Server CE CTP1 をインストールして使用します。これは、Microsoft のサイトから引き続きダウンロードできます。これで私の問題は解決しました。

于 2010-10-12T10:44:23.600 に答える
0

最終的な SQL Compact Edition 4.0 がリリースされ、インストール後、問題は発生しなくなりました。チームブログからの発表は次のとおりです。

Microsoft SQL Server Compact 4.0 をダウンロードできます

于 2011-04-03T15:13:09.737 に答える