6

SimpleMembership と共に ASP.NET MVC 4 を使用しています。

アプリケーションをビルドすると、次のテーブルが自動的にビルドされました

webpages_Membership

webpages_OAuthMembership

webpages_Roles

無事にユーザー登録できました。

ただし、webpages_UsersInRolesテーブルが見つからないようです。

このテーブルが欠落している理由を誰か知っていますか?

4

1 に答える 1

8

この記事は、問題の解決に役立つ場合があります。

アップデート:

上記の記事により、正しい方向に進むことができました。私たちの解決策は、初期化中に使用される "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 パッケージ マネージャー コンソールを使用します (コード ファースト開発を行っているため)。

更新データベース -詳細

webpages_UsersInRoles

その後、モデルは期待どおりに更新されました。将来の時間と悲しみから誰かを救うことを期待して、必要なすべてのコードを提供しました。

于 2012-11-28T15:28:31.243 に答える