gpt4 book ai didi

c# - 我是在延迟加载这些属性吗?

转载 作者:行者123 更新时间:2023-11-30 15:07:16 24 4
gpt4 key购买 nike

我们使用 Entity Framework 4.1 进行数据访问,在构建对象时我们开始问自己问题关于应用程序与数据库的关系。现在我们真正开始关注的一项如下:

public MasterPreAward()
{
public int ID
public int MemberID
public int CycleID

public virtual Cycle
public virtual Member
public virtual Status
public virtual ICollection<DataTracking> DataTrackings
public virtual ICollection<ReviewerAssignment> Reviewers
}

MasterPreAward 是从数据库生成的实体,具有 Cycle、Member、Status 的导航属性以及 DataTrackings 的两个集合审稿人。我们想知道的是, Entity Framework 如何根据这些项目加载子对象并带回我们在后续模型中使用的数据?如您所见,我们传入 MasterPreAward 对象,然后访问基于 MasterPreAward 加载的子属性。

public ViewHeaderSummary(MasterPreAward masterPreAward)
{
MasterPreAwardId = masterPreAward.ID;
ClientId = masterPreAward.Cycle.Project.Program.ClientID;
ApplicationId = masterPreAward.MemberID;
ProgramId = masterPreAward.Cycle.Project.ProgramID;
ProjectId = masterPreAward.Cycle.ProjectID;
EventTypeId = masterPreAward.DataTrackings.FirstOrDefault(x=>x.Finished==true
&& x.EventTypeID==(int)FormEvents.Application).EventTypeID;
CycleId = masterPreAward.CycleID;
FormId = masterPreAward.Cycle.CycleForms.FirstOrDefault().FormID;
}

我们想知道的是,这是访问这些属性的最佳方式,还是真的应该考虑以不同的方式进行此类工作?

最佳答案

我相信默认设置是独立延迟加载每个嵌套集合,这可能会导致大量数据库流量。

验证生成的 SQL 的最佳方法是启动 SQL 分析器并确认查询的数量。

您可以通过调用 .Include 方法强制 EF 预先加载相关实体。参见 here了解更多详情。

关于c# - 我是在延迟加载这些属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6819238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com