EFCore——单向导航属性(11)
一、双向导航与单项导航
文章实体
class Article
{
public List<Comment> Comments { get; set; } = new List<Comment>();
}
评论实体
class Comment
{
public long TheArticleId { get; set; }
}
这两个都有导航属性,都能找到彼此有联系的实体的数据
二、单向导航
单向导航只能通过单向查找数据,这么看,单向没有双向强大啊,为啥还要用单向导航。
如图,各个单都需要用到用户表。如果要使用双向导航,那么用户表要添加至少4个导向属性,就会使用户表的列有及其多的当导航属性,这是极其糟糕的,因为只要每个单能找到用户信息就行了,不需要用户找到每个单,这样只要在每个单的实体里加入导航就行了
三、创建实例
1.建立实体关系
class Leave
{
public long Id { get; set; }
public User Requester { get; set; }
public User Approver { get; set; }
public string Remarks { get; set; }
}
class User
{
public long Id { get; set; }
public string Name{ get; set; }
}
2.配置Leave实体关系
class LeaveConfig:IEntityTypeConfiguration<Leave>
{
public void Configure(EntityTypeBuilder<Leave> builder)
{
builder.ToTable("T_Leaves");
//因为不需要User知道Requester所以不设置反向导航属性
builder.HasOne<User>(b => b.Requester).WithMany().IsRequired();
builder.HasOne<User>(b => b.Approver).WithMany();
}
}
只要leaves知道user的信息就行,所以HasMany()就不需要在添加属性
3.添加数据
User u = new User { Name = "LTY" };
Leave l = new Leave { Remarks = "qingjia", Requester = u };
ctx.Leaves.Add(l);
ctx.SaveChanges();
添加成功
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」