原文地址:https://www.jianshu.com/p/c6896a651cfb数据库
EF Core导航属性分为三种:
集合导航属性:主表中对子表相关数据的引用
引用导航属性:子表中对主表数据的引用
反转导航属性:一个导航属性对应的另外一端的导航属性
微软的示例:
Blog是主表,Post是子表svg
public class Blog { public int BlogId { get; set; } public string Url { get; set; } public List<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } public int BlogId { get; set; } public Blog Blog { get; set; } }
在以上实体类的定义中:
Blog.Posts是集合导航属性,包含子表中的关联数据。
Post.Blog是引用导航属性,包含主表中的关联数据。
Post.Blog是Blog.Posts的反转导航属性,反过来也同样。
经过子表查询主表数据:
var post=db.Posts.Include("Blog").First();
能够访问到Blog表的其它字段:
Console.Write(post.Blog.Url)
经过主表访问子表数据:
var blog=db.Blogs.Include(b=>b.Posts).First();
能够访问子表相关的全部数据:post
foreach(var post in blog.Posts) { Console.Write(post.Title); }
经过引用导航属性访问主表数据,不须要额外定义。
经过集合导航属性访问子表数据,须要使用Fluent API配置。重写数据上下文的OnModelCreating方法,加入如下代码:ui
builder.Entity<Post>() .HasOne(post => post.Blog) .WithMany(bolg => blog.Posts);
若是不使用Fluent API进行配置,执行var blog=db.Blogs.Include(b=>b.Posts).First();
时会报数据库语法错误。spa