如何对多个视图使用Fluent语法

时间:2018-06-28 00:42:37

标签: entity-framework

以下语句将从demov_sel_best_address SQL Server视图返回“ BestAddress”实体。它还将返回地址所有者的Person实体。工作正常。

_ctx.BestAddresses.FromSql($"select * from [demo].[demov_sel_best_address] addr where addr.PersonID = 1") .Include(x => x.People).FirstOrDefault();

如何将语句重写为:

a。先找人。像这样:

_ctx.People .Include(x => x.BestAddress.FromSql($"select * from [demo].[demov_sel_best_address]") .where(x => x.PersonID == 1)

b。加入2视图。像这样:

_ctx.People.FromSql($"select * from [demo].[demov_sel_people] p") .Include(x => x.BestAddress.FromSql($"select * from [demo].[demov_sel_best_address]") .where(x => x.PersonID == 1)

我正在使用以下内容:

EF Core 2.0.0 VS 2017 SQL Server 2016

1 个答案:

答案 0 :(得分:0)

只要以这种方式配置,EF Core可以将视图与表完全相同。要将视图设置为表格:

  1. 定义与视图返回的列匹配的数据模型。

    公共类BestAddress {     [键]     public int ID {get;组; }

    public string Addr1 { get; set; }
    
    public string Addr2 { get; set; }
    
    etc...
    
    //Add navigation to join to other Entities.
    public int PersonID { get; set; }
    public Person Person { get; set; }
    
    etc... 
    
  2. 使用类似以下方式将实体映射到您的视图:

    [Table(“ demov_sel_best_address”,Schema =“ demo”)]

    公共类BestAddress

    [键] public int ID {get;组; }

    等...

  3. 将实体添加到上下文中。

    公共DbSet BestAddresses {get;组; }

  4. 现在,您可以针对该对象编写Linq了:

        var query = _ctx
            .BestAddresses
            .AsNoTracking()
            .Where(x => x.ID == id)
        etc...
    
  5. 该实体可以并入其他实体:

    [Table(“ People”,Schema =“ demo”)]

    公共类人物 {     [键]     public int ID {get;组; }

    public int BestAddressID{ get; set; }
    public BestAddress BestAddress{ get; set; }
    

现在,该视图可以包含在普通的Linq语法中:

_ctx.People
.Include(x => x.BestAddress)
.where(x => x.ID == 1)

可以使用相同的技术添加其他视图。然后,可以使用相同的技术将它们加入。