Many to many 如何在AspNetRoles和menu表之间创建多个关系

Many to many 如何在AspNetRoles和menu表之间创建多个关系,many-to-many,asp.net-identity,one-to-many,entity-relationship,many-to-one,Many To Many,Asp.net Identity,One To Many,Entity Relationship,Many To One,我正在使用asp.net mvc标识。我想在角色和菜单表之间创建许多关系 我发现这是为了在EntityFramework中两个表之间创建多个关系 在…上 公共类角色 { 公共角色(){} public int RoleId{get;set;} 公共字符串RoleName{get;set;} 公共虚拟ICollection菜单{get;set;} } 公共类菜单 { 公共菜单() { this.Roles=new HashSet(); } public int MenuId{get;set;}

我正在使用asp.net mvc标识。我想在角色和菜单表之间创建许多关系 我发现这是为了在EntityFramework中两个表之间创建多个关系 在…上

公共类角色
{
公共角色(){}
public int RoleId{get;set;}
公共字符串RoleName{get;set;}
公共虚拟ICollection菜单{get;set;}
}
公共类菜单
{
公共菜单()
{
this.Roles=new HashSet();
}
public int MenuId{get;set;}
公共字符串菜单名{get;set;}
公共虚拟ICollection角色{get;set;}
}

我找不到AspNetRoles类。我的问题是如何在现有标识表之间创建关系。很多很多,一个很多,一个很多,一个很多,在这里搜索了一下,我找到了我的答案

我们只需要定义这个属性

public virtual IdentityRole IdentityRole { get; set; }
在角色相关类中,这将解决问题


不删除此帖子的原因是为了涵盖此答案问题的所有可能方面

在这里搜索后,我找到了我的答案

我们只需要定义这个属性

public virtual IdentityRole IdentityRole { get; set; }
在角色相关类中,这将解决问题


不删除此帖子的原因是为了涵盖此答案问题的所有可能方面

我试图遵循您的解决方案,当然是基于您提出的问题

我编辑了您发布的第一个代码,以使其正常工作。我想解释一下Identifications表的用法以及扩展或自定义它们的一种正确方法

注意: 使用ManyToOneOneToOne关系时,此代码将起作用

public virtual IdentityRole IdentityRole { get; set; }
但我不推荐它,因为在模型关系设计的某个点上,您会得到一些奇怪和意外的结果


现在我不得不说,这是我的工作方式,我做了很多测试,总是得到我想要的

诀窍很简单,始终扩展您的标识模型,不管是哪一个。。。然后对该模型执行扩展原始标识(关系、引用、添加属性等)的所有操作

综上所述,现在让我们来看一下示例:

要在尝试获取的位置获得ManyToMany关系,必须扩展IdentityRole类,然后使用它进行定制

我将重点讨论ManyToMany关系示例,因为我觉得这是不太常见的示例

现在我们开始:

DBContext对于两个示例都是相同的:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
      .
      .
      .

      override
      public IDbSet<IdentityRole> Roles { get; set; }
      public DbSet<Menu> Menus { get; set; }
    }
如您所见,有一个pivot表是自动创建的RoleMenus,并自动添加了相应的关系

另一方面,如果有人以您为例,使用ICollection使用IdentityRole创建多人关系

让我们看看:

public class Role : IdentityRole
  {
    public Role() { }

    public string RoleName { get; set; }
    public virtual ICollection<Menu> Menus { get; set; }
  }

public class Menu
  {
    public Menu()
    {
      this.Roles = new HashSet<IdentityRole>();
    }

    public int Id{ get; set; }
    public string MenuName { get; set; }
    public virtual ICollection<IdentityRole> Roles { get; set; }
}
正如您所看到的,所创建的关系是对OneToOne的一次尝试,而不是我们所期望的结果。如果我们引用原始的IdentityModel来建立某种关系,我们总会在某个时候出错

所以我想就是这样了,很抱歉这篇长篇大论,但我觉得应该有人讨论如何编辑IdentityModel,或者至少以一种功能性的方式

所以我希望这能帮助将来遇到同样需要的人

对不起我的英语。
问候。

我正试图遵循您的解决方案,当然是基于您提出的问题

我编辑了您发布的第一个代码,以使其正常工作。我想解释一下Identifications表的用法以及扩展或自定义它们的一种正确方法

注意: 使用ManyToOneOneToOne关系时,此代码将起作用

public virtual IdentityRole IdentityRole { get; set; }
但我不推荐它,因为在模型关系设计的某个点上,您会得到一些奇怪和意外的结果


现在我不得不说,这是我的工作方式,我做了很多测试,总是得到我想要的

诀窍很简单,始终扩展您的标识模型,不管是哪一个。。。然后对该模型执行扩展原始标识(关系、引用、添加属性等)的所有操作

综上所述,现在让我们来看一下示例:

要在尝试获取的位置获得ManyToMany关系,必须扩展IdentityRole类,然后使用它进行定制

我将重点讨论ManyToMany关系示例,因为我觉得这是不太常见的示例

现在我们开始:

DBContext对于两个示例都是相同的:

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {
      .
      .
      .

      override
      public IDbSet<IdentityRole> Roles { get; set; }
      public DbSet<Menu> Menus { get; set; }
    }
如您所见,有一个pivot表是自动创建的RoleMenus,并自动添加了相应的关系

另一方面,如果有人以您为例,使用ICollection使用IdentityRole创建多人关系

让我们看看:

public class Role : IdentityRole
  {
    public Role() { }

    public string RoleName { get; set; }
    public virtual ICollection<Menu> Menus { get; set; }
  }

public class Menu
  {
    public Menu()
    {
      this.Roles = new HashSet<IdentityRole>();
    }

    public int Id{ get; set; }
    public string MenuName { get; set; }
    public virtual ICollection<IdentityRole> Roles { get; set; }
}
正如您所看到的,所创建的关系是对OneToOne的一次尝试,而不是我们所期望的结果。如果我们引用原始的IdentityModel来建立某种关系,我们总会在某个时候出错

所以我想就是这样了,很抱歉这篇长篇大论,但我觉得应该有人讨论如何编辑IdentityModel,或者至少以一种功能性的方式

所以我希望这能帮助将来遇到同样需要的人

对不起我的英语。
注意。

Hey@dE Source,当我尝试模拟这个场景时,结果是每个表都创建了一个相互引用的外键,这不是一件有趣的事情