3

我正在尝试使用代码优先实体框架生成 SQL Server Express 嵌入式数据库 (.mdf)。它曾经工作正常,但现在,我只是一遍又一遍地解决同样的错误,我无法确定问题所在。问题发生在初始化时,它永远挂起,如果您查看 Intellitrace,您会看到某种类型的 throw/catch 语句循环全部返回

“无法打开物理文件“c:\gt\aspnetdb.mdf”。操作系统错误 2:“2(无法检索此错误的文本。原因:1815”。无法附加文件“c:\gt\aspnetdb” .mdf" 作为数据库 'WikDb'。" (System.Data.SqlClient.SqlException)

更新在“无法打开物理文件....”之前,我现在也收到以下错误

列“InvariantName”被限制为唯一。值“System.Data.SqlClient”已经存在。

结束更新

这是我的 app.config

<configuration>
   <system.data>
      <DbProviderFactories>
         <remove invariant="System.Data.SqlServerCe.4.0" />
         <add name="Microsoft SQL Server Compact Data Provider 4.0"
              invariant="System.Data.SqlServerCe.4.0"
              description=".NET Framework Data Provider for Microsoft SQL Server Compact"
              type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.0"/>
      </DbProviderFactories>
   </system.data>
   <connectionStrings>
      <add name="WikDb"
           connectionString="data source=.\SQLEXPRESS;Integrated Security=True;
                       database=WikDb;AttachDBFilename=c:\gt\aspnetdb.mdf;
                       User Instance=True"
           providerName="System.Data.SqlClient" />
   </connectionStrings>
</configuration>

这是我的初始化代码

Database.SetInitializer(new DbInitializer()); //DropCreateDatabaseAlways<WikDb> intializer
Database.DefaultConnectionFactory.CreateConnection( "WikDb" );
WikDb db = new WikDb();
db.Database.Initialize( true );

任何帮助表示赞赏

谢谢,

4

1 回答 1

2

您的 SQL Server 实例似乎已损坏。在经常安装其他实例时往往会发生这种情况 - 如果使用 Express 版本,即完整版本更容易安装和维护(如果你相信谷歌 - 或我的个人经验:P)。查看这种情况是否会在另一台具有工作 SQL Server 实例的计算机上运行您的应用程序的最佳方法。您可以使用 SSMS (SQL Server Management Studio) 连接到您的数据库吗?如果没有,请尝试全新安装 SQL Server。

更多信息:

编辑:我发现如果运行单个默认实例(名为SQLEXPRESS的实例),SQL Server Express 效果最好,其他一切都给我带来了麻烦,但可能只是我。

于 2011-12-06T16:36:48.800 回答