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


添加成功

浙公网安备 33010602011771号