排名
7
文章
192
粉丝
15
评论
16
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:
50010702506256


欢迎加群交流技术

配置多对多关系,应该有一个中间表,用于关联,关联表至少两个字段,就是两张表的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; }
-
- }
评价