Code first 配置多对多关系

3760人阅读 2021/3/26 17:57 总访问:652043 评论:0 收藏:0 手机
分类: EF

配置多对多关系,应该有一个中间表,用于关联,关联表至少两个字段,就是两张表的id

//默认导航属性

//先定义一个中间表

  public class CenterTable
    {
        public int Id { get; set; }
        //学生表的id 
        public int Userid { get; set; }
        //分数表的id 
        public int Scroeid { get; set; }
	//从两张表中随便引入一张表
        public virtual List<UserInfo> userInfo { get; set; }
    }
   //需要关联表的部分
   //学生表导航属性中间表
   public virtual List<CenterTable> center { get; set; }

   //分数表导航属性中间表
   public virtual List<CenterTable> center { get; set;

数据库生成的中间表




使用fluentApi(更灵活,关联表的表名,两个外键可以自己灵活控制)

 //中间表关联上下文对象
  public DbSet<CenterTable> CenterTable { get; set; }

  //重写方法(重写关键字override )
   protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<UserInfo>().HasMany(a => a.center).WithMany(a => a.userInfo).Map(a =>
            {
		//数据库中中间表的表名
                a.ToTable("UserInfo_Scroe");
		//第一张表的ID(根据方法中的表的顺序排)
                a.MapLeftKey("Userid");
		//第二张表的ID
                a.MapRightKey("Scroeid");
            });

        }

自定义关联

可以将多对多拆分成两个一对多

定义中间表绑定两个外键分别为两张表的ID

//中间表(中间表还可以定义其他字段,最灵活,最通用)

  public class CenterTable
    {
        public int Id { get; set; }
        
        public int Userid { get; set; }

        public int Fatherid{ get; set; }

        [ForeignKey("Userid ")]
        public virtual UserInfo userInfo { get; set; }
        
        [ForeignKey("Fatherid")]
        public virtual Parents  parents   { get; set; }
    }

//学生表
 public partial class UserInfo
    {
        
        [Key]
        public int Sid { get; set; }
       
        [Required, Column("UserName")]
        public string UserName { get; set; }
       
        [Required, Column("UserNum")]
        public string UserNum { get; set; }
     
    }

    
    //家人表
      public class Parents
    {
        [Key]
        public int Sid { get; set; }

        [Required, Column("Father")]
        public string Father { get; set; }
        
        [Required, Column("Mather")]
        public string Mather { get; set; }

        [Required, Column("Uid")]
        public int Uid { get; set; }

    }


评价
脚踏实地,一步一个脚印
排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
欢迎加群交流技术