繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM