即使数据库初始化程序设置为CreateIfNotExists,我也总会遇到此异常。
Additional information: Cannot create file 'C:\\Users\\Krab\\Documents\\Visual Studio 2013\\Projects\\Customer_UI\\customers2.mdf' because it already exists. Change the file path or the file name, and retry the operation.
CREATE DATABASE failed. Some file names listed could not be created. Check related errors.
为什么EF尝试创建数据库,即使它已经存在?
的App.config
<connectionStrings>
<add name="Customer.CustomersContext" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename='C:\\Users\\Krab\\Documents\\Visual Studio 2013\\Projects\\Customer_UI\\customers2.mdf';Integrated Security=True;Connect Timeout=30" providerName="System.Data.SqlClient" />
</connectionStrings>
的DbContext:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
namespace Customer
{
public class CustomersContext : DbContext
{
public CustomersContext() : base("Customer.CustomersContext")
{
Database.SetInitializer(new CreateDatabaseIfNotExists<CustomersContext>());
//Database.CreateIfNotExists();
//System.Console.WriteLine(Database.Connection.ConnectionString);
}
public DbSet<CustomerDb> Customers { get; set; }
public DbSet<Contact> Contacts { get; set; }
}
}
答案 0 :(得分:3)
您不必在App.config文件中转义反斜杠。
我的猜测是,检查现有数据库的任何机制不都能正确解析具有双目录分隔符的文件路径(C:\\Users\\...)
。
EF将继续尝试创建新数据库,但无论创建新数据库的任何机制都能正确解析具有双目录分隔符的文件路径。由于文件存在,导致IOException
。
如果我的预感是正确的,那么简单地解决这条路径就可以解决问题。
答案 1 :(得分:1)
好的,现在看起来很好。
答案 2 :(得分:0)
错误指的是SQL Server实例上的文件,无论它在哪里。就我而言,它是一台不同的机器。我已经重命名了数据库,希望让EF重新创建它