嘗試在EF Core中使用`ThenInclude`時出現異常

.net .net-core c# entity-framework entity-framework-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之間存在一對一關聯,而CompanyEmail之間存在一對多關聯。

CustomersRepository我創建了以下方法:

public IEnumerable<Customer> GetAll()
{
    return _context.Set<Customer>()
                   .Include(x => x.Company)
                       .ThenInclude(x => x.Emails)
                   as IEnumerable<Customer>;
}

現在然後ThenInclude piece給出了一個問題。如果我嘗試使用這種方法,我最終得到一個execption,說source是null。

我已經審查了一切,但我沒有發現任何錯誤。似乎一切都寫得正確。

重點是:我有實體ABC所以A有一個BB有很多C ,當我檢索A我需要得到一切關聯。

我在這做錯了什麼?為什麼我得到這個例外?

一般承認的答案

這似乎與Github上的這個錯誤報告有關https://github.com/aspnet/EntityFramework/issues/2274

它被報告為IOE,然後報告固定,然後它作為NRE返回,就像你的例外。問題說它已被修復,但我不確定版本是什麼,我不知道你目前使用的版本。

(搜索了github repro中的ThenInclude問題 - 有一個TON。)

聽起來不穩定。遠離它。您可以通過直接指定include的完整路徑來完全避免此問題

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


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因