在我的开发机器上,我试图使用包管理器控制台中的 update-database 重新创建我的数据库。我相信我已按照上述帖子中的说明进行操作。
我收到此错误消息:
发生文件激活错误。物理文件名“\WRDatabase.mdf”可能不正确。诊断并更正其他错误,然后重试该操作。创建数据库失败。无法创建列出的某些文件名。检查相关错误。
我正在运行的命令是:
update-database -ConfigurationTypeName WRConfiguration -ConnectionStringName localWR -Verbose
请注意,在上面的命令中,我传递了一个连接字符串名称,并且似乎正在使用连接字符串,因为 .mdf 文件的名称出现在错误消息中。
有趣的是,我能够运行我的代码并创建了我的数据库,但是它使用错误的名称创建(它被命名为“VIN.DataModel.WRContext”,这是 DbContext 的完整命名空间和类名)。我的猜测是,当我的代码运行时,EF 找不到用于创建数据库的连接字符串。这是有意的,因为我会将这个上下文映射到在服务器上运行的数据库以及在本地计算机上运行的数据库的副本(即,我将为同一个 DbContext 提供两个连接字符串)。
这是应用程序配置:
<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; }
}