vs2012のASP.NET MVC 4 アプリケーションのプロジェクトでは,ユーザ管理機能までテンプレートが作成してくれます。このUserProfileに独自の項目を追加するいい方法がわかったので報告します。

この方法で行うと、後でUserProfileクラスに追加する項目が増えても自動的にDBを修正してくれるので大変うれしいです。

参照元:  How to create custom additional fields in UserProfile in MVC4

【開発環境】

  • Windows7
  • Visual Studio 2012 Upsate3
  • ASP.NET MVC 4 アプリケーション プロジェクト c#

【修正方法】

①[InitializeSimpleMembership]をコメントアウトする

[Authorize]
 //[InitializeSimpleMembership]
 public class AccountController : Controller
{
}

②データベース初期化クラスを新規作成する。 (App_Startフォルダに作成した)

public class MyDatabaseInit : DropCreateDatabaseAlways<UsersContext>
{
  protected override void Seed(UsersContext context) {
    SeedMembership();
  }
  private void SeedMembership() {
    WebSecurity.InitializeDatabaseConnection("DefaultConnection",
    "UserProfile", "UserId", "UserName", autoCreateTables: true);
  }
}

③ユーザプロファイルのDbContext継承クラスを修正する。

public class MyDatabaseContext : DbContext
 {
  public DbSet<UserProfile> UserProfiles { get; set; }
  protected override void OnModelCreating(DbModelBuilder modelBuilder)
   {
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
   }
 }

④UserProfileクラスに新しいフィールドを追加する。

[Table("UserProfile")]
 public class UserProfile
 {
   [Key]
   [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
   public int UserId { get; set; }
   public string UserName { get; set; }
   public string MobilePhone { get; set; }
 }

⑤Global.asaxのApplication_Start()を修正

protected void Application_Start()
{
  AreaRegistration.RegisterAllAreas();
  WebApiConfig.Register(GlobalConfiguration.Configuration);
  FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
  RouteConfig.RegisterRoutes(RouteTable.Routes);
  BundleConfig.RegisterBundles(BundleTable.Bundles);
  AuthConfig.RegisterAuth();

  

  Database.SetInitializer<MyDatabaseContext>(new MyDatabaseInit());
  new MyDatabaseContext().UserProfile.Find(1); //一度使っているだけ
}