[英]Trouble inserting record with a one-to-many relationship in Entity Framework
[英]Entity Framework 6 one-to-many with a reference to last record
我的模型中有两个实体,它们之间存在一对多关系
public class Analysis : Entity
{
public virtual IList<Process> Processes{ get; set; }
}
public class Process: Entity
{
public virtual Analysis Analysis { get; set; }
}
这可以正常工作,但是为了优化代码并限制模型,我只想公开Analysis中的最后一个过程,如下所示:
public class Analysis : Entity
{
public virtual Process Process { get; set; }
}
public class Process: Entity
{
public virtual Analysis Analysis { get; set; }
}
但是我不希望Process属性成为Analysis表中的一列,而是让此属性与该Analysis ID的最后一个Process一起加载。
如何在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
{
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public virtual Process Process { get; set; }
}
并更改了模型上下文
modelBuilder.Entity<Process>().HasRequired(x => x.Analysis).WithMany().WillCascadeOnDelete(false);
添加了迁移并将字段的创建更改为此
ALTER TABLE dbo.Analisys ADD Process_Id AS dbo.UDFGetProcess(id)
这样的回报是我的预期和性能是相同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.