ASP.NET MVC プロジェクトのカスタム db コンテキストで本当に嫌な問題が発生しています。
ApplicationDbContext
さて、私は自動生成されたものを自分のものとマージしようとしましたが、GSDbContext
それでも維持IdentityUsers
しIdentityRoles
て作業しています。
これは私のカスタム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)
それは私をかなり夢中にさせました。
前もって感謝します。