sqlserver-在EF4中自动创建数据库的问题



我正在学习实体框架代码优先的ASP.NET MVC 3。我正在学习一个教程,并下载了相应的解决方案,以便在本地机器上进行测试。现在,我不太了解数据库的自动创建(如果磁盘上还没有这个数据库的话(。我第一次运行应用程序时,数据库就为我创建了。没关系。

这是Web.config 中的部分

<add name="BlogContext" 
     connectionString="Data Source=.SQL2008;Initial Catalog=CodeFirstMVC.mdf;Integrated Security=SSPI"
     providerName="System.Data.SqlClient" /> 

但我有两个问题:

第一出于测试目的,我删除了磁盘上的数据库,然后再次运行解决方案。我以为数据库会自动创建,但我错了:我收到了下面的错误消息:

{"Unable to open the physical file "c:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\CodeFirstMVC.mdf.mdf". Operating system error 2: "2(failed to retrieve text for this error. Reason: 15105)".rnCannot open database "CodeFirstMVC.mdf" requested by the login. The login failed.rnLogin failed for user 'sa'.rnFile activation failure. The physical file name "c:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA\CodeFirstMVC.mdf_log.LDF" may be incorrect."}

我注意到,如果我在Web.config中更改了文件名,那么数据库将再次成功创建你能解释一下吗为什么我必须更改数据库名称才能使其重新运行?

第二名数据库是在C:\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA中的文件夹中创建的。我想将我的数据库存储在App_DATA目录中如何继续

Initial catalog不是文件的路径。它是数据库的名称。AttachDbFilename用于指定文件,因此您的连接字符串应为:

Data Source=.SQL2008;Initial Catalog=CodeFirstMVC;AttachDbFilename=|DataDirectory|CodeFirstMVC.mdf;Integrated Security=SSPI

其中|DataDirectory|指示SQL server使用本地应用程序数据目录,而不是全局SQL server数据目录。web应用程序的本地数据目录是App_Data

编辑:

我刚刚注意到,您可能使用的是完整的SQL server,而不是SQL server express。据我所知,在App_Data中自动创建数据库是SQL server express的功能。这也解释了第一个错误,因为SQL服务器创建了名为CodeFirstMVC.mdf的数据库,并将该数据库存储在CodeFirstMVPC.mdf.mdf文件中的全局数据目录中,并将事务日志存储在CodeFirst MVC.mdf.ldf文件中。它还在内部注册了该数据库。删除文件并没有从SQL server中删除数据库。您只是破坏了它的功能,但SQL server仍然相信数据库存在。这也是为什么你必须更改名称才能使其工作的原因。

最新更新