将属性添加到标识模型并迁移数据库



我有一个带有个人用户帐户身份验证的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发动机罩下

相关内容

  • 没有找到相关文章

最新更新