次のコードを使用してXMLを生成していますが、作業中のシステムでは、EntityFramework内の遅延読み込みではなく、手動読み込みを使用しています。したがって、実際には、EnsureLoaded()を呼び出して、どの要素をロードする必要があるかを明示的に指定する必要があります。問題は、深くネストされたフィールドを使用してEnsureLoaded()を呼び出すことです。これが私のコードです。
public partial class Test
{
public XElement ReturnDetails()
{
Test.DriverReference.EnsureLoaded();
return new XElement("Test",
new XAttribute("CarNum", CarNum),
new XAttribute("Make", Make ?? string.Empty),
new XAttribute("Model", Model ?? string.Empty),
new XAttribute("Colour", Colour ?? string.Empty),
new XElement("Drivers",
from driver in Drivers
select new XElement("Driver",
new XAttribute("DriverNum", driver.DriverNum),
new XAttribute("Notes", driver.Notes),
new XElement("Routes"),
from route in driver.Routes
select new XElement("Route",
new XAttribute("Name", route.Name),
new XAttribute("Notes", route.Notes)
))));
}
}
問題は、Driverの値を取得し、エンティティ階層の3つのレベルを超えたときにNullReferenceExceptionsを取得し続けることです。私がやりたいのは次のとおりです。
public partial class Test
{
public XElement ReturnDetails()
{
Test.DriverReference.EnsureLoaded();
return new XElement("Test",
new XAttribute("CarNum", CarNum),
new XAttribute("Make", Make ?? string.Empty),
new XAttribute("Model", Model ?? string.Empty),
new XAttribute("Colour", Colour ?? string.Empty),
new XElement("Drivers",
from driver in Drivers.EnsureLoaded() *****
select new XElement("Driver",
new XAttribute("DriverNum", driver.DriverNum),
new XAttribute("Notes", driver.Notes),
new XElement("Routes"),
from route in driver.Routes.EnsureLoaded() *****
select new XElement("Route",
new XAttribute("Notes", route.Notes),
new XAttribute("Name", route.Name)
))));
}
}