尝试在EF Core中使用`ThenInclude`时出现异常

时间:2016-07-26 18:48:45

标签: c# .net entity-framework entity-framework-core .net-core

我正在使用 Entity Framework Core 和Repository Pattern,我遇到了一个问题。

我的课程CustomerCompanyEmail隐藏了与此无关的内容,如下所示:

public class Email
{
    public int EmailId { get; protected set; }

    public string Address { get; protected set; }

    public string Description { get; protected set; }

    public Email(string address, string description)
    {
        if (string.isNullOrEmpty(address))
            throw new ArgumentException(nameof(address));

        if (string.isNullOrEmpty(description))
            throw new ArgumentException(nameof(description));

        this.Address = address;
        this.Description = description;
    }

    protected Email() { }
}

public class Company
{
    public int CompanyId { get; protected set; }

    public IList<Email> Emails { get; set; }
}

public class Customer
{
    public int CustomerId { get; protected set; }

    public Company Company { get; set; }
}

设置映射,以便CustomerCompany之间存在一对一关联,而Company和{{1}之间存在一对多关联}}

Email我创建了以下方法:

CustomersRepository

现在public IEnumerable<Customer> GetAll() { return _context.Set<Customer>() .Include(x => x.Company) .ThenInclude(x => x.Emails) as IEnumerable<Customer>; } 件正在解决问题。如果我尝试使用这种方法,我最终得到一个execption,说ThenInclude为空。

我已经审核了所有内容,但我没有发现任何错误。似乎一切都写得正确。

重点是:我有实体sourceAB,以便C拥有AB之一有许多B,当我检索C时,我需要将所有内容联系起来。

我在这里做错了什么?为什么我得到这个例外?

1 个答案:

答案 0 :(得分:5)

这似乎与Github https://github.com/aspnet/EntityFramework/issues/2274

上的这个错误报告有关

它被报告为IOE,然后报告已修复,然后它作为NRE返回,就像您的例外。问题说它已被修复,但我不确定版本是什么,我不知道你目前使用的版本。

(搜索了github repro中的ThenInclude问题 - 有一个TON。)

声音不稳定。远离它。您可以通过直接指定包含的完整路径来完全避免此问题

muhCompaniesOrWhatevs.Include(x => x.Company.Emails);