EF Core導航屬性

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

相關文章
相關標籤/搜索