我正在使用 Entity Framework Core 和Repository Pattern,我遇到了一个问题。
我的课程Customer
,Company
和Email
隐藏了与此无关的内容,如下所示:
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; }
}
设置映射,以便Customer
和Company
之间存在一对一关联,而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
为空。
我已经审核了所有内容,但我没有发现任何错误。似乎一切都写得正确。
重点是:我有实体source
,A
,B
,以便C
拥有A
和B
之一有许多B
,当我检索C
时,我需要将所有内容联系起来。
我在这里做错了什么?为什么我得到这个例外?
答案 0 :(得分:5)
这似乎与Github https://github.com/aspnet/EntityFramework/issues/2274
上的这个错误报告有关它被报告为IOE,然后报告已修复,然后它作为NRE返回,就像您的例外。问题说它已被修复,但我不确定版本是什么,我不知道你目前使用的版本。
(搜索了github repro中的ThenInclude问题 - 有一个TON。)
声音不稳定。远离它。您可以通过直接指定包含的完整路径来完全避免此问题
muhCompaniesOrWhatevs.Include(x => x.Company.Emails);