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]
属性即可。