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> 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; }
}

通过引用导航属性访问主表数据,不需要额外定义。
通过集合导航属性访问子表数据,需要使用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

相关