11

我有一个使用 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 中点击刷新将使完全相同的页面正确加载
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

安装和使用 SQL Server CE CTP1,它仍然可以在Microsoft 站点上下载。这解决了我的问题。

于 2010-10-12T10:44:23.600 回答
1

我今天在使用 NuGet 下载已发布的 MVC3 和 SQL Server CE 4.0 时遇到了同样的问题,并通过取消注释该行来解决:

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

并将 MyContext 替换为从模型文件夹中的 DBContext 继承的上下文类。

于 2011-02-25T21:36:29.527 回答
0

最终的 SQL Compact Edition 4.0 已经发布,安装后问题不再发生。以下是来自团队博客的公告:

Microsoft SQL Server Compact 4.0 可供下载

于 2011-04-03T15:13:09.737 回答