C# 实体框架6一对多引用最后一条记录

C# 实体框架6一对多引用最后一条记录,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我的模型中有两个实体,它们有一对多的关系,就像这样 public class Analysis : Entity { public virtual IList<Process> Processes{ get; set; } } public class Process: Entity { public virtual Analysis Analysis { get; set; } } public class Analysis : Entity { [Da

我的模型中有两个实体,它们有一对多的关系,就像这样

public class Analysis : Entity
{
    public virtual IList<Process> Processes{ get; set; }
}
public class Process: Entity
{
     public virtual Analysis Analysis { get; set; }
}
public class Analysis : Entity
{
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public virtual Process Process { get; set; }
}
但我不希望Process属性成为分析表中的一列,而是希望使用此分析Id的最后一个进程加载此属性


我如何在ModelBuider中实现这一点?

我从Slava Utesinov的想法中获得灵感,并创建了一个新的想法来提高性能,他的想法将加载分析中的所有流程

首先,我创建了一个sql函数来返回最后一个进程

    CREATE FUNCTION UDFGetProcess(   @Id int )   RETURNS int AS
    BEGIN
        declare @rint
        select top 1 @r = id from Process p where p.analysis_id = @id order by CreationDate desc
        return @r
    END
然后我就这样换了班

public class Analysis : Entity
{
    public virtual IList<Process> Processes{ get; set; }
}
public class Process: Entity
{
     public virtual Analysis Analysis { get; set; }
}
public class Analysis : Entity
{
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public virtual Process Process { get; set; }
}
并更改了模型上下文

modelBuilder.Entity<Process>().HasRequired(x => x.Analysis).WithMany().WillCascadeOnDelete(false);

这样,返回就是我想要的,性能也是一样的。

只需将属性添加到
Analysis
class:
public Process LastProcess{get{return processs.Last();}}
中,并使用
[NotMapped]
属性即可。