首先向Asp.Net 2.0 Identity Database添加属性

时间:2015-01-22 11:46:23

标签: c# asp.net-mvc

我在mvc中有一个DataBase First网站。

我的问题是我想为AspNetUser添加一些点并能够显示/修改它们。例如,当注册时。

所以我添加了例如年龄到AspNetUser更新了数据库。然后我去了edmx DataBase并且到目前为止更新了我的模型。到目前为止,一切都在发挥作用。

现在我去了IdentityModel并添加了年龄。

public class ApplicationUser : IdentityUser
{
    public int Age { get; set; }

    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
    {
        // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
        var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
        // Add custom user claims here            
        return userIdentity;
    }
}

然后我去了RegisterViewModel

public class RegisterViewModel
{
.....

    public int Age { get; set; }
}

现在,当我尝试启动网站并登录时,只要按下登录,我就会收到Folowing错误。

自创建数据库以来,支持'ApplicationDbContext'上下文的模型已更改。考虑使用Code First Migrations来更新数据库(http://go.microsoft.com/fwlink/?LinkId=238269)。

Zeile 77:             // This doesn't count login failures towards account lockout
Zeile 78:             // To enable password failures to trigger account lockout, change to shouldLockout: true
Zeile 79:             var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);
Zeile 80:             switch (result)
Zeile 81:             {

一旦我评论出最后两个变化,一切都会再次起作用。我想知道我做错了什么。

1 个答案:

答案 0 :(得分:0)

为了让您的项目使用其他属性,您需要添加一个&#34; Migration&#34;为了使Entity Framework Code First能够自动更新您的数据库 -

  1. 从&#34;工具&#34;打开NuGet包管理器控制台。 Visual Studio中的菜单。

  2. 输入&#34; add-migration AddedUserProperties&#34;

  3. 输入&#34; update-database&#34;

  4. 有关详细信息,请参阅Code First Migrations on MSDN

    根据您的项目配置,您可能需要输入&#34; enable-migrations&#34;在此之前可以为您设置代码首次迁移(如果已经设置了,您应该在项目中有一个&#34;迁移&#34;目录)。

    如果模型已更改,或者只是每次运行代码时,也可以将代码设置为首先删除并重新创建数据库。

    显然删除数据库将删除已经注册的任何用户,因此这可能最好在早期的原型设计阶段完成并使用&#34; DropCreateDatabaseWhenModelChanges&#34;初始化而不是&#34; DropCreateDatabaseAlways&#34;,或者通过为测试用户设置种子,以便使用数据库自​​动重新创建这些用户。

    要做到这一点 -

    Database.SetInitializer(new DropCreateDatabaseWhenModelChanges<ApplicationDbContext>());
    

    有关详情,请参阅Understanding Database Initializers in Entity Framework Code First