4

ApplicationUser の Required プロパティを追加しようとしています (ASP.NET Identity、MVC5)

簡単な例を次に示します。

public class ApplicationUser : IdentityUser
{
    [Required]
    public string FirstName { get; set; }
}

フィールドはデータベースに作成されますが、最終的にNULLABLE
になります。フィールドは NOT NULL であると予想されます。

ここに画像の説明を入力

これを回避する方法はありますか?

4

5 に答える 5

8

Table per Hierarchy (TPH) マッピングは、Entity Framework Code First の既定です。これは、同じテーブルを共有する型階層内のすべてのクラスで FirstName が必要でない場合、列を非 null にすることはできないことを意味します。

FirstName 列を null 非許容にする場合は、別のマッピング戦略を選択できます。代わりに Table per Type (TPT) を使用すると、IdentityUser 用に 1 つのテーブル (デフォルトでは AspNetUsers) と ApplicationUser 用に別のテーブルが作成されます。FirstName は ApplicationUser テーブルに固有であるため、null 非許容にすることができます。

TPT を使用するには、次のように OnModelCreating メソッドをオーバーライドできます。

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Entity<ApplicationUser>().ToTable("ApplicationUser");
}
于 2013-11-06T20:10:19.690 に答える
0

configuration.cs ファイルのシード メソッドに次の行を追加することで、このようなフィールドを null 以外にすることができました。

context.Database.ExecuteSqlCommand("ALTER TABLE [AspNetUsers] ALTER COLUMN [FirstName] nvarchar(MAX) NOT NULL");

于 2013-11-16T05:30:34.533 に答える
0

これは上記の @Number8 へのコメントです (現時点ではコメントできません)。おそらくOPの問題に関連する同じ問題に遭遇しました。Database-Update は、移行の構成クラス (Configuration.cs) をチェックします。シード メソッドがある場合は、シード メソッドで null 以外のプロパティのデフォルト値を設定する (またはモデルで null 可能にする) 必要があります。

于 2013-12-25T07:50:23.927 に答える
0

以下のように、Required 属性を使用し、OnModelCreating メソッドをオーバーライドして、IdentityUser に null 非許容の文字列フィールドを追加しようとしました。

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<ApplicationUser>().Property(x => x.FirstName).IsRequired();

    base.OnModelCreating(modelBuilder);
}

どちらも成功しません。これが仕様なのか、新しい ASP.NET Identity のバグなのかはわかりません。バグ関連も検索しましたが、成功しませんでした。

おそらく、移行を追加すると、現在必要なものを達成するのに役立つでしょう。

于 2013-11-06T18:14:56.767 に答える