向Identity模型添加属性并迁移数据库

时间:2016-03-25 13:04:16

标签: c# sql-server asp.net-identity ef-migrations

我有一个带有个人用户帐户身份验证的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中打开了Package Manager控制台并运行:

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 - 史蒂夫发表评论后

我用来在Package Manager Console中选择项目,使项目成为“启动项目”,这将产生不同的错误There is already an object named 'AspNetRoles' in the database.。 这是真的。我应该删除预先存在的表,以及我的数据呢?

1 个答案:

答案 0 :(得分:1)

您收到该错误是因为您尚未建立基线初始迁移,因此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 Under the Hood