• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ASP.NETEntityFrameworkCorecodefirst多对多设计

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
  • 摘要:参考网址:https://docs.microsoft.com/zh-cn/ef/core/get-started/full-dotnet/new-db场景:使用ASP.NETEntityFrameworkCoreCODEFIRST创建多对多实体需求:CODEFIRST实现多对多的实体创建。细节:创建两个实体类,一个是AppUser,一个是AppRole,两个实体通过UserRole关联。即一个AppUser可能隶属于多个AppRole,一个AppRole可能关联了多个AppUser
  • 标签:.net ASP.NET Framework net 设计

参考网址:https://docs.microsoft.com/zh-cn/ef/core/get-started/full-dotnet/new-db

场景:使用ASP.NET EntityFrameworkCore CODE FIRST 创建多对多实体

需求:CODE FIRST实现多对多的实体创建。

细节:

创建两个实体类,一个是AppUser,一个是AppRole,两个实体通过UserRole关联。即一个AppUser可能隶属于多个AppRole,一个AppRole可能关联了多个AppUser。

在EntityFrameworkCore 中,不支持两个实体之间的直接多对多,可以通过引入第三个实体,分别进行两次一对多来间接实现多对多。

官方描述为:

Many-to-many relationships without an entity class to represent the join table are not yet supported. However, you can represent a many-to-many relationship by including an entity class for the join table and mapping two separate one-to-many relationships.

 

步骤:

1.使用VS2017创建项目;

2.NuGet添加 Microsoft.EntityFrameworkCore.SqlServer

3.创建如下三个类

 public class AppUser
    {

        public int AppUserID { get; set; }
        public string Guid { get; set; }

        public string UserName { get; set; }
        public string LoginName { get; set; }
        public string LoginPassword { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }
        public int Sex { get; set; }

        
        public int BranchOfficeID { get; set; }
        public BranchOffice BranchOffice { get; set; }

        public List<UserRole> UserRoles { get; set; }


    }
logs_code_collapse">AppUser 类 
 public class AppRole
    {
        public int AppRoleID { get; set; }
        public string Guid { get; set; }
        public string RoleName { get; set; }

       public List<UserRole> UserRoles { get; set; }
    }
AppRole类 
 public class UserRole
    {
        public int UserRoleID { get; set; }


        public int AppRoleID { get; set; }
        public AppRole AppRole { get; set; }


        public int AppUserID { get; set; }
        public AppUser AppUser { get; set; }
    }
UserRole类

4.创建DBContext

 public class ApiContext:DbContext
    {
      
        public DbSet<AppUser> AppUsers { get; set; }

        public DbSet<AppRole> AppRoles { get; set; }

        public DbSet<UserRole> UserRoles { get; set; }


        /// <summary>
        /// 通过第三张表UserRole 实现 多对多绑定 AppRole 和 AppUser
        /// </summary>
        /// <param name="modelBuilder"></param>
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            modelBuilder.Entity<UserRole>()
                .HasKey(t => new { t.AppRoleID, t.AppUserID });

            modelBuilder.Entity<UserRole>()
                        .HasOne(userrole => userrole.AppUser)
                        .WithMany(user => user.UserRoles)
                        .HasForeignKey(userrole => userrole.AppUserID);

            modelBuilder.Entity<UserRole>()
                        .HasOne(userrole => userrole.AppRole)
                        .WithMany(role => role.UserRoles)
                        .HasForeignKey(userrole=> userrole.AppRoleID);
        }


        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlServer(@"Server=sandbox.XXXX.com;Initial Catalog=API;Persist Security Info=True;User ID=sa;Password=XXXXX;");
        }
    }
DbContext类

5.运行 Add-Migration APIMigration 

运行结束后,可以发现项目中多了 APIMigration.cs

6.运行Update-Database,生成数据库。

检查数据库生成结果:

 

检查UserRoles表的外键

至此,创建多对多的实体成功。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
乱想-ASP.NET整个生命周期(含IIS处理)发布时间:2022-07-10
下一篇:
ASP.NET控件篇-----My97DatePicker实现OA日期记事功能发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap