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