[英]problems with automatic creation of the database in 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)\".\r\nCannot open database \"CodeFirstMVC.mdf\" requested by the login. The login failed.\r\nLogin failed for user 'sa'.\r\nFile 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 服务器使用本地应用程序数据目录而不是全局 SQL 服务器数据目录。 web 应用程序的本地数据目录是App_Data
。
编辑:
我刚刚注意到您可能正在使用完整的 SQL 服务器而不是 SQL 服务器快递。 据我所知,在 App_Data 中自动创建数据库是 SQL 服务器快递的功能。 这也解释了第一个错误,因为 SQL 服务器创建了名为 CodeFirstMVC.mdf 的数据库,并将数据库存储在 CodeFirstMVC.mdf.mdf 文件中的全局数据目录中,并将事务日志存储在 CodeFirstMVC.mdf.ldf 文件中。 它还在内部注册了该数据库。 通过删除文件,您并未从 SQL 服务器中删除数据库。 您只是破坏了它的功能,但 SQL 服务器仍然认为数据库存在。 这也是为什么您必须更改名称才能使其正常工作的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.