0

ASP.NET MVC プロジェクトのカスタム db コンテキストで本当に嫌な問題が発生しています。

ApplicationDbContextさて、私は自動生成されたものを自分のものとマージしようとしましたが、GSDbContextそれでも維持IdentityUsersIdentityRolesて作業しています。

これは私のカスタムApplicationUserクラス定義です。

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

    public bool Active { get; set; }
}

そしてコンテキストクラス:

public class GSDbContext : IdentityDbContext
{
     public GSDbContext()
          : base("GSDbContext")
     {
     }

     public virtual IDbSet<ApplicationUser> Users { get; set; }
     public virtual IDbSet<IdentityRole> Roles { get; set; }
     public virtual IDbSet<IdentityUserLogin> UserLogins { get; set; }
     public virtual IDbSet<IdentityUserClaim> UserClaims { get; set; }
     public virtual IDbSet<IdentityUserRole> UserRoles { get; set; }
}

さて、新しい役割を追加しようとすると、System.ArgumentNullException. ところで、流血の痛みなしで簡単に新しいユーザーを作成できます。このコードを使用して、新しいユーザーを作成します。

var userManager = new UserManager<ApplicationUser>(
            new UserStore<ApplicationUser>(new GSDbContext()));
userManager.Create(user, password);

新しいロールを追加するには:

var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(new GSDbContext()));
roleManager.Create(new IdentityRole("Admin"));

次の例外がスローされます。

System.ArgumentNullException was unhandled by user code
  HResult=-2147467261
  Message=Value cannot be null.
Parameter name: source
  Source=System.Core
  ParamName=source
  StackTrace:
       at System.Linq.Queryable.Any[TSource](IQueryable`1 source, Expression`1 predicate)
       at Microsoft.AspNet.Identity.EntityFramework.IdentityDbContext`1.ValidateEntity(DbEntityEntry entityEntry, IDictionary`2 items)
       at System.Data.Entity.DbContext.GetValidationErrors()
       at System.Data.Entity.Internal.InternalContext.SaveChangesAsync(CancellationToken cancellationToken)
       at System.Data.Entity.Internal.LazyInternalContext.SaveChangesAsync(CancellationToken cancellationToken)
       at System.Data.Entity.DbContext.SaveChangesAsync(CancellationToken cancellationToken)
       at System.Data.Entity.DbContext.SaveChangesAsync()
       at Microsoft.AspNet.Identity.EntityFramework.RoleStore`1.<CreateAsync>d__2.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
       at Microsoft.AspNet.Identity.RoleManager`1.<CreateAsync>d__0.MoveNext()
    --- End of stack trace from previous location where exception was thrown ---
       at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
       at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
       at Microsoft.AspNet.Identity.AsyncHelper.RunSync[TResult](Func`1 func)
       at Microsoft.AspNet.Identity.RoleManagerExtensions.Create[TRole](RoleManager`1 manager, TRole role)

それは私をかなり夢中にさせました。

前もって感謝します。

4

2 に答える 2

0

IdentityDbContext に既に存在するプロパティを削除する必要があります。

public class GSDbContext : IdentityDbContext
{
     public GSDbContext()
          : base("GSDbContext")
     {
     }
     public virtual IDbSet<ApplicationUser> Users { get; set; }
     //Nothing ELSE
}
于 2016-02-16T19:02:25.760 に答える
0

DbContextすでにIdentityDbContextそれ自体が含まれている に ID モデルを含めないでください。したがって、次のようにコンテキストを変更できます。

public class GSDbContext : IdentityDbContext<ApplicationUser>
{
    // put your OTHER entities apart from identity related onces
    public IDbSet<MyModel> MyModels { get; set; }
    // and so on
}
于 2016-02-16T18:48:44.927 に答える