12

ストック asp.net mvc 5 アプリケーションは、「IdentityModels.cs」という名前のファイルという名前の別のコンテキストで、アプリケーション ユーザー (別名 ID ユーザー) を作成します。これは次のようになります。

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
}

アプリケーションユーザーを通常のデータコンテキスト、つまり次のようなものに入れようとしています

 public class BlogProphetContext : DbContext
    {

        public DbSet<ApplicationUser> ApplicationUsers { get; set; }
        public DbSet<Answer> Answers { get; set; }
        public DbSet<Question> Questions { get; set; }
        public DbSet<Tag> Tags { get; set; }
    }

ただし、これを行うたびに、アカウントを作成しようとするたびに次のエラーが表示されます

The UserId field is required

次のコード行を実行しようとすると、 AccountController.cs で

result = await UserManager.AddLoginAsync(user.Id, info.Login);

私は自分のアプローチが間違っていると感じています.ApplicationUsersをメインデータコンテキストファイルに入れることはできません. すべてのファイルが最新です。

4

4 に答える 4

3

この場合、ApplicationUser を asp.net Identity に関連付けたくない場合は、applicationUser クラスから継承を削除するのが最も簡単です。

ApplicationUser : IdentityUser から ApplicationUser に移動し、そのクラスで Id プロパティを作成します。

その場合、IdentityDBContext を使用する必要はありません。

もちろん、AccountController を完全に書き直すか、削除する必要があります。IdentityUserにリンクされているため、とにかくUserManagerを使用することはできません

次に、EF を使用している場合は、移行/更新データベースを必ず追加してください。

アカウント コントローラーをそのまま維持し、IdentityDbContext を維持したいが、他のエンティティを追加したい場合は、簡単に次のようにします。

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext() : base("DefaultConnection")
    {
    }

    public DbSet<Dept> Dept{ get; set; }
    public DbSet<Course> Course{ get; set; }
    public DbSet<Etc> Etc{ get; set; }
}
于 2013-11-01T13:19:26.067 に答える
2

ApplicationUser クラスが IdentityUser から継承されていることを確認してください。

次に、すべての ASP.NET Identity クラスを正しくマップするようにコンテキストを構成する必要があります。これらは:

  1. ApplicationUser (あなたのクラス)
  2. IdentityUserClaim
  3. アイデンティティユーザーログイン
  4. IdentityUserRole
  5. IdentityRole

この詳細は、ここに掲載するには少し複雑すぎますが、ASP.NET Identity のリリース バージョンで動作するサンプル プロジェクトを作成しました。ここで確認できます: https://github.com/onybo/Asp.Net-Identity-sample-app/tree/master/CustomUser

于 2013-10-28T10:36:02.583 に答える
0

これがあなたに役立つかどうか、またはあなたの質問を完全に理解しているかどうかはわかりません...しかし、独自の「モデル」を使用してみてから変更してください:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("PUT IN YOUR MODEL CONN HERE")
    {
    }

これ以上の設定ができるかどうか、またはこれが本当にコンテキストを変更するかどうかはわかりません。

于 2013-10-28T06:18:52.653 に答える