繁体   English   中英

linq to sql在一对多关系上加载子级

[英]linq to sql loading children on one to many relationship

我有3张桌子。 突发事件,根本原因和突发事件根本原因。 表格eventrootcauses与“事件”是一对多关联的。 当我得到事件对象时,没有一个我期望的根本原因对象列表,而是我得到了(在我的即时窗口中)

var rt = incident.IncidentRootCauses;

{System.Data.Linq.EntitySet}计数:1

HasLoadedOrAssignedValues: true

IsDeferred: false

我希望能够在查询运行时加载所有rootcause对象。 我知道问题是事件没有明确地与rootcause表绑定。 感谢您对此的任何帮助。

using (var db = new IncidentTrackerDataContext())
            {
                var lo = new DataLoadOptions();
                lo.LoadWith<Incident>(incidents => incidents.ReportedTo);
                lo.LoadWith<Incident>(incidents => incidents.Shift);
                lo.LoadWith<Incident>(incidents => incidents.Machine);
                lo.LoadWith<Incident>(incidents => incidents.Department);
                lo.LoadWith<Incident>(incidents => incidents.IncidentRootCauses);
                lo.LoadWith<IncidentRootCause>(i => i.RootCause);

                // lo.LoadWith<Incident>(incidents => incidents.IncidentManagers);
                // lo.LoadWith<Incident>(incidents => incidents.IncidentMembers);
                // lo.LoadWith<Incident>(incidents => incidents.IncidentWitnesses);
                db.LoadOptions = lo;
                db.DeferredLoadingEnabled = false;
                Incident incident = (from i in db.Incidents
                                     where i.IncidentReportID == new Guid(incidentID)
                                     select i).FirstOrDefault();

                return incident;
            }

听起来您还想要第二层渴望的实体。

在相同的LoadOptions上,尝试:

lo.LoadWith<IncidentRootCause>(irc => irc.RootCause);

您可能要检查生成的SQL。 尝试加载多个子级时,某些带有选项的加载可能会被忽略,因为这可能意味着提取过多的记录。 结果,直到退出using子句后,某些子记录才可能被拉出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM