[英]EF Core - Navigation Property loaded from SQL view
I have the following entities:我有以下实体:
public class Animal
{
public int Id { get; set; }
public string Name { get; set; }
/// <summary>
/// Current Animal Status
/// </summary>
public virtual AnimalStatus CurrentAnimalStatus
{
get { return AnimalStatuses.OrderByDescending(x => x.VersionNo).First(); }
}
/// <summary>
/// List of all Animal Statuses
/// </summary>
public virtual ICollection<AnimalStatus> AnimalStatuses { get; set; }
/// <summary>
/// List of all Animal Operations
/// </summary>
public virtual ICollection<AnimalOperation> AnimalOperations { get; set; }
}
and和
public class AnimalStatus
{
public int Id { get; set; }
public int VersionNo { get; set; }
public int BloodCount { get; set; }
public int AnimalId { get; set; }
public virtual Animal Animal { get; set; }
}
I'm only ever interested in the most recent AnimalStatus
so would like to use a View to populate just the CurrentAnimalStatus
property and remove the need for ICollection<AnimalStatus>
.我只对最近的AnimalStatus
感兴趣,所以想使用 View 来填充CurrentAnimalStatus
属性并消除对ICollection<AnimalStatus>
的需要。 The rest of the Animal
entity should be populated by EF core. Animal
实体的 rest 应由 EF 内核填充。
Currently the AnimalStatus
table holds 300,000 records so is very slow using EF Core with目前AnimalStatus
表包含 300,000 条记录,因此使用 EF Core 非常慢
_dbContext.Animal.Include(x => x.AnimalStatus);
Is it possible in EF Core to have a navigation property on an entity be populated from a SQL view?是否可以在 EF Core 中从 SQL 视图填充实体上的导航属性?
CREATE VIEW [dbo].[CurrentAnimalStatusView]
AS
WITH ANIMAL_EVENTS_CTE AS
(
SELECT
AnimalId,
BloodCount,
ROW_NUMBER() OVER (PARTITION BY AnimalId ORDER BY VersionNo DESC) AS RowNumber --RowNumber = 1 indicates the latest status
FROM
AnimalBloodTests
)
SELECT
AnimalId,
BloodCount
FROM
ANIMAL_EVENTS_CTE cte
WHERE
RowNumber = 1 --Only interested in latest status for each AnimalId
You can create a model for your view and map it to Dbset.您可以为您的视图创建 model 并将 map 创建到 Dbset。
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<CurrentAnimalStatus>(eb =>
{
eb.HasNoKey();
eb.ToView("CurrentAnimalStatusView");
});
base.OnModelCreating(modelBuilder);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.