EF Core導航屬性


引用:http://www.manongjc.com/detail/13-lwkhruhnyywibmi.html

文地址:https://www.jianshu.com/p/c6896a651cfb

EF Core導航屬性分為三種:
集合導航屬性:主表中對子表相關數據的引用
引用導航屬性:子表中對主表數據的引用
反轉導航屬性:一個導航屬性對應的另一端的導航屬性
微軟的示例:
Blog是主表,Post是子表

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();
可以訪問子表相關的所有數據:

foreach(var post in blog.Posts) { Console.Write(post.Title); } 

通過引用導航屬性訪問主表數據,不需要額外定義。
通過集合導航屬性訪問子表數據,需要使用Fluent API配置。重寫數據上下文的OnModelCreating方法,加入以下代碼:

builder.Entity<Post>() .HasOne(post => post.Blog) .WithMany(bolg => blog.Posts); 

如果不使用Fluent API進行配置,執行var blog=db.Blogs.Include(b=>b.Posts).First();時會報數據庫語法錯誤。

  1. 1.使用ToTraceString()方法得到EF查詢所生成的SQL方法代碼如下

    efcore 如何查看生成的sql
  2.  

    2.生成的SQL為如下代碼

    efcore 如何查看生成的sql
  3.  

    3.調用DbQuery<>的ToString()方法得到所生成的SQL的方法代碼

    efcore 如何查看生成的sql
  4.  

    4.生成的SQL是如下代碼

    efcore 如何查看生成的sql
  5.  

    5.在.NET Reflector得到的實現是這樣的如下代碼

    efcore 如何查看生成的sql
  6.  

    6.實現查ef生成sql的例子如下方法代碼

    efcore 如何查看生成的sql
    efcore 如何查看生成的sql
  7.  

    7.輸出的結果如下

    efcore 如何查看生成的sql
    efcore 如何查看生成的sql


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM