SimpleMembership と共に ASP.NET MVC 4 を使用しています。
アプリケーションをビルドすると、次のテーブルが自動的にビルドされました
webpages_Membership
webpages_OAuthMembership
webpages_Roles
無事にユーザー登録できました。
ただし、webpages_UsersInRolesテーブルが見つからないようです。
このテーブルが欠落している理由を誰か知っていますか?
SimpleMembership と共に ASP.NET MVC 4 を使用しています。
アプリケーションをビルドすると、次のテーブルが自動的にビルドされました
webpages_Membership
webpages_OAuthMembership
webpages_Roles
無事にユーザー登録できました。
ただし、webpages_UsersInRolesテーブルが見つからないようです。
このテーブルが欠落している理由を誰か知っていますか?
この記事は、問題の解決に役立つ場合があります。
アップデート:
上記の記事により、正しい方向に進むことができました。私たちの解決策は、初期化中に使用される "webpages_UsersInRoles" の定義を UserProfile.cs クラスに追加することでした (最初にコードを実行しています)。
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
[DataType(DataType.EmailAddress)]
public string EmailAddress { get; set; }
public bool IsEnabled { get; set; }
}
[Table("webpages_Membership")]
public class Membership
{
public Membership()
{
//Roles = new List<Role>();
OAuthMemberships = new List<OAuthMembership>();
UsersInRoles = new List<UsersInRole>();
}
[Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int UserId { get; set; }
public DateTime? CreateDate { get; set; }
[StringLength(128)]
public string ConfirmationToken { get; set; }
public bool? IsConfirmed { get; set; }
public DateTime? LastPasswordFailureDate { get; set; }
public int PasswordFailuresSinceLastSuccess { get; set; }
[Required, StringLength(128)]
public string Password { get; set; }
public DateTime? PasswordChangedDate { get; set; }
[Required, StringLength(128)]
public string PasswordSalt { get; set; }
[StringLength(128)]
public string PasswordVerificationToken { get; set; }
public DateTime? PasswordVerificationTokenExpirationDate { get; set; }
//public ICollection<Role> Roles { get; set; }
[ForeignKey("UserId")]
public ICollection<OAuthMembership> OAuthMemberships { get; set; }
[ForeignKey("UserId")]
public ICollection<UsersInRole> UsersInRoles { get; set; }
}
[Table("webpages_OAuthMembership")]
public class OAuthMembership
{
[Key, Column(Order = 0), StringLength(30)]
public string Provider { get; set; }
[Key, Column(Order = 1), StringLength(100)]
public string ProviderUserId { get; set; }
public int UserId { get; set; }
[Column("UserId"), InverseProperty("OAuthMemberships")]
public Membership User { get; set; }
}
[Table("webpages_UsersInRoles")]
public class UsersInRole
{
[Key, Column(Order = 0)]
public int RoleId { get; set; }
[Key, Column(Order = 1)]
public int UserId { get; set; }
[Column("RoleId"), InverseProperty("UsersInRoles")]
public Role Roles { get; set; }
[Column("UserId"), InverseProperty("UsersInRoles")]
public Membership Members { get; set; }
}
[Table("webpages_Roles")]
public class Role
{
public Role()
{
UsersInRoles = new List<UsersInRole>();
}
[Key]
public int RoleId { get; set; }
[StringLength(256)]
public string RoleName { get; set; }
//public ICollection<Membership> Members { get; set; }
[ForeignKey("RoleId")]
public ICollection<UsersInRole> UsersInRoles { get; set; }
}
次に、dbContext を継承するクラスに public DbSet UsersInRoles { get; } を追加しました。設定; }。
public class IntranetEntities : DbContext
{
public DbSet<UserProfile> UserProfiles { get; set; }
public DbSet<Membership> Memberships { get; set; }
public DbSet<Role> Roles { get; set; }
public DbSet<UsersInRole> UsersInRoles { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
public override int SaveChanges()
{
try
{
return base.SaveChanges();
}
catch (DbEntityValidationException dbEx)
{
foreach (var validationErrors in dbEx.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
}
}
}
return 0;
}
}
次に、プロジェクトのビルドに進み、実行した VS パッケージ マネージャー コンソールを使用します (コード ファースト開発を行っているため)。
更新データベース -詳細
その後、モデルは期待どおりに更新されました。将来の時間と悲しみから誰かを救うことを期待して、必要なすべてのコードを提供しました。