排名
6
文章
6
粉丝
16
评论
8
{{item.articleTitle}}
{{item.blogName}} : {{item.content}}
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2024TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术
分类:
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; } }
评价