我有一个使用 SQL Server CE 4.0 的 ASP.NET MVC 3 Beta 网站。使用ScottGu 的 NerdDinner 示例和我自己的代码,我有时会在尝试访问数据库时立即收到以下异常:
文件已存在。尝试使用不同的数据库名称。 [ 文件名 = D:\Sourcecode\NerdDinner\NerdDinner\App_Data\NerdDinners.sdf ] 第 17 行:公共 ActionResult Index() 第 18 行:{ 第 19 行:var Dinners = from nerdDinners.Dinners 中的 d 第 20 行:其中 d.EventDate > DateTime.Now 第21行:选择d; [SqlCeException (0x80004005): 文件已经存在。尝试使用不同的数据库名称。[ 文件名 = D:\Sourcecode\NerdDinner\NerdDinner\App_Data\NerdDinners.sdf ]] System.Data.SqlServerCe.SqlCeEngine.ProcessResults(IntPtr pError,Int32 小时)+92 System.Data.SqlServerCe.SqlCeEngine.CreateDatabase() +1584 System.Data.SqlServerCe.SqlCeProviderServices.DbCreateDatabase(DbConnection 连接,Nullable`1 超时,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 context) +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 D:\Sourcecode\NerdDinner\NerdDinner\Controllers\HomeController.cs:19 中的 NerdDinner.Controllers.HomeController.Index()
我无法弄清楚为什么这有时适用于现有的 .dbf 文件,而有时它会抱怨。我什至尝试过明确设置默认行为
Database.SetInitializer(new CreateDatabaseOnlyIfNotExists<...>());
有没有其他人经历过这个?
- 重新启动卡西尼似乎没有什么不同。
- 收到此错误后在 IE 中点击刷新将使完全相同的页面正确加载。