以下语句将从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
答案 0 :(得分:0)
只要以这种方式配置,EF Core可以将视图与表完全相同。要将视图设置为表格:
定义与视图返回的列匹配的数据模型。
公共类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...
使用类似以下方式将实体映射到您的视图:
[Table(“ demov_sel_best_address”,Schema =“ demo”)]
公共类BestAddress
[键] public int ID {get;组; }
等...
将实体添加到上下文中。
公共DbSet
现在,您可以针对该对象编写Linq了:
var query = _ctx
.BestAddresses
.AsNoTracking()
.Where(x => x.ID == id)
etc...
该实体可以并入其他实体:
[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)
可以使用相同的技术添加其他视图。然后,可以使用相同的技术将它们加入。