原文地址: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