我有一个带有个人用户帐户身份验证的MVC5项目。我自己注册了一个测试,一切都很好。然后为了测试起见,我向ApplicationUser
类添加了一个属性,现在ti看起来是这样的:
public class ApplicationUser : IdentityUser
{
public string NewPropery { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
return userIdentity;
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false)
{
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
}
然后我在Visual Studio 2013中打开了包管理器控制台并运行:
PM> Enable-Migrations
PM> Add-Migration "NewProperty"
PM> Update-Database
前两个命令运行良好,但第三个命令失败,这就是错误:
System.Data.SqlClient.SqlException(0x80131904):与网络相关的或与建立连接时发生实例特定错误SQL Server。找不到或无法访问服务器。验证实例名称正确,并且SQL Server配置为允许远程连接。(提供程序:SQL网络接口,错误:26-定位指定的服务器/实例时出错)
数据库是MVC模板创建的常用LocalDb,我在项目中保留了创建时的连接字符串:
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)v11.0;AttachDbFilename=|DataDirectory|aspnet-NyProject.Web-20160325120840.mdf;Initial Catalog=aspnet-MyProject.Web-20160325120840;Integrated Security=True"
providerName="System.Data.SqlClient" />
错误在哪里?
更新1-Steve评论后
我过去在Package Manager控制台中选择项目,使该项目成为"启动项目",这将产生不同的错误There is already an object named 'AspNetRoles' in the database.
。这是真的。我应该删除预先存在的表吗?我的数据呢?
您得到这个错误是因为您没有建立基线初始迁移,所以EF认为需要创建所有对象。这是因为它基于代码构建模型,并将其与上次迁移中存储的快照进行比较,所以请尝试以下操作:
1) Comment out the new field.
2) Delete the existing migration.
3) Add a baseline migration: add-migration Initial -IgnoreChanges
4) update-database (now EF has a snapshot to compare changes to).
5) add-migration NewProperty
6) update-database
EF发动机罩下