Entity framework 实体框架代码第一个成员资格提供程序关系问题
我试图先在asp.net成员资格提供程序上编写代码。当代码第一次创建表时,它会生成所有表和到桥接表的适当关系,但它也会创建一个从AspNet_用户(一个)到AspNet_角色(多个)的附加关系。你知道它为什么这么做吗?用户和角色表之间不应该有任何关系Entity framework 实体框架代码第一个成员资格提供程序关系问题,entity-framework,ef-code-first,asp.net-membership,Entity Framework,Ef Code First,Asp.net Membership,我试图先在asp.net成员资格提供程序上编写代码。当代码第一次创建表时,它会生成所有表和到桥接表的适当关系,但它也会创建一个从AspNet_用户(一个)到AspNet_角色(多个)的附加关系。你知道它为什么这么做吗?用户和角色表之间不应该有任何关系 public class Aspnet_Role { public Aspnet_Role() { Aspnet_Users = new HashSet<Aspnet_Users>(); }
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\u角色
{
公共Aspnet_角色()
{
Aspnet_Users=new HashSet();
}
[关键]
公共Guid RoleId{get;set;}
公共字符串RoleName{get;set;}
公共字符串LowereRoleName{get;set;}
公共字符串说明{get;set;}
公共虚拟ICollection Aspnet_用户{get;set;}
}
公共类Aspnet_用户
{
公共Aspnet_用户()
{
Aspnet_Roles=new HashSet();
}
[关键]
公共Guid用户标识{get;set;}
公共字符串用户名{get;set;}
公共字符串LoweredUserName{get;set;}
公共字符串MobileAlias{get;set;}
公共布尔是非对称的{get;set;}
公共日期时间LastActivityDate{get;set;}
公共虚拟Aspnet_成员身份Aspnet_成员身份{get;set;}
公共虚拟ICollection Aspnet_角色{get;set;}
}
公共类StagingContext:DbContext
{
公共DbSet Aspnet_角色{get;set;}
公共数据库集Aspnet_用户{get;set;}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasMany(r=>r.Aspnet_角色)
.有很多
.Map(m=>m.ToTable(“aspnet\u UsersInRoles”)
.MapRightKey(“RoleId”)
.MapLeftKey(“用户ID”);
}
}
我在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"));
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Entity()
.HasMany(r=>r.Aspnet_角色)
.WithMany(u=>u.Aspnet\u用户)
.Map(m=>m.ToTable(“aspnet\u UsersInRoles”)
.MapRightKey(“RoleId”)
.MapLeftKey(“用户ID”);
}
为什么用户与其角色之间不应该存在关系?这种关系应该只在桥接表上,而不在父表上。它(aspnet_用户)与(aspnet_userinroles)有一对多关系,而(aspnet_角色)与aspnet_userinroles有一对多关系。但实体创建另一个关系,即aspnet_用户与aspnet_角色之间的关系,我不希望这样。