在我的开发机器上,我正在尝试使用包管理器控制台中的update-database重新创建数据库。 我相信我已经按照上述文章中的说明进行了操作。
我收到以下错误消息:
发生文件激活错误。 物理文件名 '\ WRDatabase.mdf' 可能不正确。 诊断和纠正其他错误,并重试操作。 CREATE DATABASE 失败。 某些列出的文件名无法创建。 检查相关的错误。
我运行的命令是:
update-database -ConfigurationTypeName WRConfiguration -ConnectionStringName localWR -Verbose
注意命令中我传递了连接字符串名称,看起来连接字符串正在使用,因为.mdf文件的名称出现在错误消息中。
有趣的是,我能够运行我的代码并创建数据库,但它被创建的名称不正确(它被命名为“VIN.DataModel.WRContext”,这是DbContext的完整命名空间和类名)。我的猜测是当我的代码运行EF时,无法找到用于创建数据库的连接字符串。这是有意为之的,因为我将把此上下文映射到在服务器上运行的数据库以及在本地计算机上运行的db的副本(即,我将为同一DbContext拥有两个连接字符串)。
这是app config:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<connectionStrings>
<add name="localWR" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDB)\v11.0;Initial Catalog =WRDatabase;AttachDBFilename=|DataDirectory|\WRDatabase.mdf; Integrated Security=True;MultipleActiveResultSets=True" />
</connectionStrings>
在 Configuration 类的构造函数中,AutomaticMigrationsEnabled 被设置为 false。
以下是上下文类:
public class WRContext : DbContext
{
static WRContext()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<WRContext, VIN.DataModel.WRMigrations.WRConfiguration>());
}
public WRContext()
{
}
public WRContext(string connectionString)
: base(connectionString)
{
}
public DbSet<Emp> Emps { get; set; }
public DbSet<Inv> Invs { get; set; }
public DbSet<WRConfig> WRConfigs { get; set; }
}