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();

在这里插入图片描述
在这里插入图片描述
添加成功

posted @   有诗亦有远方  阅读(70)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示