2

我正在将我的 .NET MVC5 模板转换为 ASPNETZERO 的 .NET Core MVC 模板。因此,我正在转换的所有代码都按照我在 MVC5 模板解决方案中的需要工作。我的方法代码如下所示。

  public async Task<EditCompanyDto> GetCompanyForEdit(NullableIdDto input)
    {
        var companyEditDto = (await _companyRepository.GetAsync((int)input.Id));
        var cmp = companyEditDto.MapTo<EditCompanyDto>();
        return cmp;
    }

此代码在 MVC5 模板中完美运行,并返回 Address、Contact 和 Note 的相关实体。在 .NET Core 解决方案中,此完全相同的代码仅返回上述方法中的 Address 和 Contact 集合。它不断将 Note 集合返回为 NULL。

下面显示的是我的公司实体。我删除了这篇文章的一些字段,但保留了所有导航属性。

public class Company : FullAuditedEntity, IMustHaveTenant
{

    public string CompanyTaxId { get; set; }

    public bool ActiveYesNo { get; set; }

    public virtual NoteHeader Note { get; set; }

    public virtual List<CompanyAddress> Addresses { get; set; }

    public virtual List<CompanyContact> Contacts { get; set; }

    public virtual int TenantId { get; set; }

    public Company()
    {
        Addresses = new List<CompanyAddress>();
        Contacts = new List<CompanyContact>();
    }

}
4

3 回答 3

2

尝试使用Include方法加载您的集合。

你可以像这样使用它:

var company = _companyRepository.GetAll()
                                .Include(c => c.Addresses)
                                .Include(c => c.Contacts)
                                .FirstOrDefault(x => x.Id == input.Id);
于 2017-07-12T11:21:32.340 回答
2

你说注意收藏。据我所知,注意不是收藏。让我们假设它是集合。加布里埃尔的做法是正确的。但不包括注释字段。结果你的代码应该是这样的

var company = _companyRepository.GetAll()
                                .Include(c => c.Addresses)
                                .Include(c => c.Contacts)
                                .Include(c => c.Note)
                                .FirstOrDefault(x => x.Id == input.Id);

注意: GetAll() 并不意味着您从数据库中获取所有数据。GetAll() 返回 IQueryable。因此,您可以在其后添加 Linq 方法。但是,如果您使用 GetAllList(),是的,它会从表中获取所有数据。

于 2017-07-13T05:50:26.930 回答
1

@Alper 谢谢!NoteHeader 实体包含 NoteDetails 的集合,也就是便笺集合所在的位置。我已经实现了@Gabriel 的代码建议并实际添加到其中,以获得我所需要的。

var companyEditDto = _companyRepository.GetAll()
                           .Include(c => c.Addresses)
                           .Include(c => c.Contacts)
                           .Include(c => c.Note).ThenInclude(N => N.Notes)
                           .FirstOrDefault(x => x.Id == input.Id);
于 2017-07-14T02:13:53.517 回答