C# 使用LINQ和EntityFramework内联EnsureLoaded()

C# 使用LINQ和EntityFramework内联EnsureLoaded(),c#,xml,linq,entity-framework,C#,Xml,Linq,Entity Framework,我用下面的代码生成一些XML,但是我正在使用的系统在EntityFramework中使用手动加载而不是延迟加载。因此,实际上,我必须调用EnsureLoaded()来明确说明需要加载哪些元素。问题是调用EnsureLoaded()时使用了深度嵌套的字段。这是我的密码 public partial class Test { public XElement ReturnDetails() { Test.DriverReference.EnsureLoaded();

我用下面的代码生成一些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)
                ))));
    }
}
问题是获取驱动程序的值,并且在超出三个实体层次结构级别时继续获取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)
                ))));
    }
}

你试过了吗?e、 g.如果驱动程序是顶级对象集,则需要调用。确保在开始构建Xml之前重新加载,但对于路由,您可以在
driver.Include(“routes”)
中的route中尝试。我有,但我得到了错误;System.Data.Objects.DataClasses.RelatedEnd.Include(bool,bool,System.Collections.Generic.HashSet)由于其保护级别而无法访问。奇怪的是,它是一个公共分部类。有什么想法吗?