1

私は3つのテーブルを持っています。Incidents、Rootcauses、および IncidentRootCauses。テーブルincidentrootcausesは、1対多としてインシデントに関連付けられています。インシデント オブジェクトを取得すると、期待どおりに根本原因オブジェクトのリストが表示されず、代わりに (イミディエイト ウィンドウで) 表示されます

var rt = incident.IncidentRootCauses;

{System.Data.Linq.EntitySet} カウント: 1

HasLoadedOrAssignedValues: true

IsDeferred: false

クエリの実行時にすべての根本原因オブジェクトをロードできるようにしたいと考えています。問題は、インシデントが根本原因テーブルに明示的に関連付けられていないことです。これについて何か助けてくれてありがとう。

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;
            }
4

2 に答える 2

1

第 2 レベルの熱心に読み込まれたエンティティも必要なようです。

同じ LoadOptions で、次を試してください。

lo.LoadWith<IncidentRootCause>(irc => irc.RootCause);
于 2012-09-10T16:02:12.083 に答える
0

生成された SQL を確認することができます。複数の子をロードしようとすると、オプションを使用したロードの一部が無視される場合があります。これは、プルするレコードが多すぎる可能性があるためです。その結果、using 句が終了するまで子レコードの一部がプルされない場合があります。

于 2012-09-10T17:24:42.053 に答える