无法将文件* .mdf附加为数据库
基本上我已经遵循了一个教程,并决定在之后删除.mdf
文件。
现在每当我尝试运行应用程序,我得到以下错误(这个线程的标题)。 我得到错误的代码如下所示(ASP.NET MVC 4):
OdeToFoodDB db = new OdeToFoodDB(); public ActionResult Index() { var model = db.Restaurants.ToList(); return View(model); }
我的连接string如下:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=OdeToFoodDb;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf" providerName="System.Data.SqlClient" />
我试过看SQL Server对象资源pipe理器,但它看起来如下:
此外,在服务器资源pipe理器中,我看不到任何数据连接。
而当我尝试在服务器资源pipe理器中添加一个新的连接时,我看不到任何名为OdeToFoodDb
数据库。
对不起,这个广泛的问题,但我是新来的entity framework,并没有完全得到这里的错误。
看看这个: entity framework不创build数据库
我会尝试给数据库一个不同的名字。 有时,当您尝试第二次创build具有相同名称的数据库时,可能会遇到SQL Express问题。 有一种方法可以使用SQL Server Management Studio来解决这个问题,但是使用不同的数据库名称通常更容易。
编辑这个答案被接受,因为它确认了错误和OP使用的解决方法(重命名数据库可以帮助 )。 我完全同意重命名数据库并不是一个真正可以接受的方式,并不能完全解决这个问题 。 不幸的是,我没有检查其他方法来真正解决SSMS中的问题。
我认为对于SQL Server本地数据库你不应该使用Initial Catalog
属性。 我build议使用:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\OdeToFoodDb.mdf" providerName="System.Data.SqlClient" />
我认为本地数据库不支持同一个mdf文件上的多个数据库,所以指定不支持初始目录(或不太受支持,我有一些奇怪的错误)。
-
从Package Manager Console运行:
sqllocaldb.exe stop v11.0
sqllocaldb.exe delete v11.0
-
运行你的项目
- 注册一个用户
从应该这样做的连接string中删除此行;)“AttachDbFilename = | DataDirectory | whateverurdatabasenameis-xxxxxxxxxx.mdf”
我面临同样的问题。 VS 2013中的以下步骤为我解决了这个问题:
- 在服务器浏览器中添加新的连接到数据库
- selectMicrosoft SQL Server数据库文件作为数据源
- 根据web.config中的连接stringselect数据库文件名
- 新的数据库文件已创build,并在服务器资源pipe理器中出现了两个数据库连接:“MyDatabaseName”和“MyDatabaseName(MyProjectName)”
- 删除一个连接(我删除了“MyDatabaseName”)
“无法将文件”C:\ Github \ TestService \ TestService \ App_data \ TestService.mdf“附加为数据库”TestService“
当您遇到上述错误信息时,请执行以下步骤。
- 打开SQL Server对象资源pipe理器
- 点击刷新button。
- 展开(localdb)\ MSSQLLocalDB(SQL Server 12.x.xxxxx – xxxxx \ xxxx)
- 展开数据库
- 请删除相同的名称数据库
- 点击右键,然后删除
- 返回到您的软件包pipe理控制台
- 更新数据库
根据@ davide-icardi,删除“初始目录= xxx;” 从web.config,但也检查您的azure色的发布configuration文件也从这里删除它:
[YourAspNetProjectpath] \ Properties \ PublishProfiles [YourAspNetProjectName] .pubxml
<PublishDatabaseSettings> <Objects xmlns=""> <ObjectGroup Name="YourAspNetProjectName" Order="1" Enabled="True"> <Destination Path="Data Source=AzureDataBaseServer;Initial Catalog=azureDatabase_db;User ID=AzureUser_db_sa@AzureDataBaseServer;Password=test" /> <Object Type="DbCodeFirst"> <Source Path="DBMigration" DbContext="YourAspNetProjectName.Models.ApplicationDbContext, YourAspNetProjectName" MigrationConfiguration="YourAspNetProjectName.Migrations.Configuration, YourAspNetProjectName" Origin="Configuration" /> </Object> </ObjectGroup> </Objects> </PublishDatabaseSettings>
我发现注释掉用来初始化数据库的上下文部分解决了这个问题。 Havnt还有时间来查明播种声明有什么问题,但是播种解决了问题。
重新创build你的数据库。 不要删除它,你的应用程序应该继续工作。
我有同样的错误。 奇怪的是,我有一个新的项目forms从头开始,那里工作完美,另一个更大的项目,我总是遇到这个错误信息。
完美的工作项目(几乎)总是自动创build数据库(包括文件)。 它可以是任何命令,读,写,更新。 文件被创build。 当然它使用
DropCreateDatabaseIfModelChanges
只有一种情况,当它遇到困难时:如果mdf是自动创build的,并且您删除了mdf和日志文件。 那就是这个了。 说再见你的自杀…
我发现修复它的唯一方法就像上面提到的那样:
sqllocaldb stop v11.0 & sqllocaldb delete v11.0
之后,一切都恢复正常(LocalDB处理的所有其他数据库也消失了!)。
编辑:这是不正确的。 我只是试了一下,v11.0自动重新创build,所有的mdfs保持可用。 我还没有尝试过使用“非基于文件的”LocalDB。
令人困惑的是,如果还有其他的错误,我也会得到这个错误。 所以我的build议是,如果你想确保你的数据库设置是稳健的:从头开始创build一个新的解决scheme/项目,使用最基本的数据库命令(添加一个实体,显示所有实体,删除所有实体),并看到如果有效的话。
如果是的话,问题是在VS2013configuration和版本和nuget和东西深渊的某处。
如果否,您的LocalDB安装有问题。
对于任何真正想要了解EF中发生了什么的人(我仍然不确定是否可以:-)) http://odetocode.com/Blogs/scott/archive/2012/08/14/a-troubleshooting-导对entity framework的连接放大器,migrations.aspx
附注:如果您需要正在运行的示例项目,请将其移动。
使用SQL SERVER Management Studio修复此问题
您的问题:您收到一个错误,如'不能附加文件'YourDB.mdf'作为数据库'YourConnStringNamedContext';
原因:发生是因为您删除了支持文件.mdf,ldf而没有实际删除SqlLocalDb正在运行的实例中的数据库; 在VS中重新运行代码将无济于事,因为您不能重新创build具有相同名称的数据库(这就是重命名工作的原因,但留下了旧的虚拟数据库名称)。
修正:我使用VS2012,同样采用不同的版本。
导航到下面的path并input
c:\ program files \ microsoft sql server \ 110 \ Tools \ Binn> sqllocaldb info
上面的cmd显示了实例名称,包括“v11.0”
如果实例已经运行,请在提示符处input
sqllocaldb信息v11.0
请注意以下信息所有者: YourPCName \用户名, 状态:正在运行, 实例pipe道名称: np:\。\ pipe \ LOCALDB#12345678 \ tsql \ query,其中123456789是一些随机字母数字
如果状态没有运行或停止,则使用启动实例
sqllocaldb启动v11.0
并提取与上述相同的信息。
在SS Management Studio的“连接”对话框中input
服务器名称:np:\。\ pipe \ LOCALDB#12345678 \ tsql \ query
auth:Windowsvalidation
用户名称:(与所有者相同,为Win。auth。灰色)
一旦连接,find你删除的幻像数据库(例如YourDB.mdf应创build了一个名为YourDB的数据库),并真正删除它。
完成! 一旦消失,VS EF应该没有问题重新创build它。
奇怪的是,对于完全相同的问题,是什么帮助我在configuration的以下部分中更改'to'v11.0'。
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="v11.0" /> </parameters>
我最近遇到了同样的问题。 这是一件要检查的事情。 在视觉工作室有三个地方我们应该检查并删除数据库。
1. Solution Explorer's App_Data folder 2. Server Explorer's Data Connection menu 3. SQL Server Object Explorer
当我从前两点删除数据库时,错误仍然会发生。 所以,我也需要从SQL Server Object Explorer中删除数据库。 然后,我可以轻松地运行“更新数据库”命令没有错误。 希望这可以帮助。
您已经在服务器资源pipe理器中安装了该数据库的旧副本。 所以它在服务器对象浏览器/ SQL服务器中是一个简单的命名冲突。 在决定将其移动到Apps_Data文件夹之前,您可能已经创build了相同的数据库目录名称。 所以数据库名称已经存在,只需要删除。
只需进入Visual Studio>查看> SQL Server对象资源pipe理器,并删除旧的数据库名称及其连接。 再次重试您的应用程序,它应该在App_Data中安装.mdf文件,并再次在服务器资源pipe理器中创build相同的数据库。