【问题标题】:Entity Framework Code First Membership Provider Relationship Issue实体框架代码优先成员资格提供者关系问题
【发布时间】:2013-02-20 17:27:59
【问题描述】:

我正在尝试首先在 asp.net 会员提供商上编写代码。当代码第一次创建表时,它会生成所有表以及与桥表的适当关系,但它还会创建从 AspNet_User(one) 到 Aspnet_Role(many) 的附加关系。你知道它为什么这样做吗?用户和角色表之间不应该有任何关系。

public class Aspnet_Role
{
    public Aspnet_Role()
    {
        Aspnet_Users = new HashSet<Aspnet_Users>();
    }
    [Key]
    public Guid RoleId { get; set; }
    public string RoleName { get; set; }
    public string LoweredRoleName { get; set; }
    public string Description { get; set; }

    public virtual ICollection<Aspnet_Users> Aspnet_Users { get; set; }
}
public class Aspnet_Users
{
    public Aspnet_Users()
    {
        Aspnet_Roles = new HashSet<Aspnet_Role>();
    }
    [Key]
    public Guid UserId { get; set; }
    public string UserName { get; set; }
    public string LoweredUserName { get; set; }
    public string MobileAlias { get; set; }
    public bool IsAnonymous { get; set; }
    public DateTime LastActivityDate { get; set; }

    public virtual Aspnet_Membership Aspnet_Membership { get; set; }
    public virtual ICollection<Aspnet_Role> Aspnet_Roles { get; set; }
}
public class StagingContext : DbContext
{
    public DbSet<Aspnet_Role> Aspnet_Roles { get; set; }
    public DbSet<Aspnet_Users> Aspnet_Users { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)

    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.Entity<Aspnet_Users>()
            .HasMany(r => r.Aspnet_Roles)
            .WithMany()
            .Map(m => m.ToTable("aspnet_UsersInRoles")
                .MapRightKey("RoleId")
                .MapLeftKey("UserId"));

    }
}

【问题讨论】:

  • 为什么用户与其角色之间不应该存在关系?
  • 关系应该只在桥表上而不是在父表上。它 (aspnet_user) 与 (aspnet_userinroles) 具有一对多关系,并且 (aspnet_role) 与 aspnet_userinroles 具有一对多关系)。但是实体在 aspnet_user 到 aspnet_roles 之间创建了另一个我不想要的关系。

标签: entity-framework ef-code-first asp.net-membership


【解决方案1】:

我在 WithMany 扩展上添加了导航属性。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{
    base.OnModelCreating(modelBuilder);

     modelBuilder.Entity<Aspnet_Users>()
         .HasMany(r => r.Aspnet_Roles)
         .WithMany(u => u.Aspnet_Users)
         .Map(m => m.ToTable("aspnet_UsersInRoles")
         .MapRightKey("RoleId")
          .MapLeftKey("UserId")); 

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 2017-07-05
    • 2012-10-26
    相关资源
    最近更新 更多