为什么无法通过自定义DbContext和存储库通过DDD聚合模式从EFCore中的父(根)对象获取子数据,因此无法正常工作

时间:2018-07-31 04:42:52

标签: asp.net-core-2.0 ef-core-2.0

我有BillerBillerReferenceBillerSetting DbSet。 BillerReferenceBillerSetting具有BillerId作为外键关系。

这是Biller.cs

public class Biller : FullAuditedEntity
{
    [Required]
    public virtual string Name {get;set;}

    public virtual decimal? Amount {get;set;}

    public virtual List<BillerReference> BillerReferences {get;set;}

    public virtual List<BillerSetting> BillerSettings {get;set;}
}

BillerReference.cs

public class BillerReference : FullAuditedEntity
{
    [Required]
    public virtual int? BillerId {get;set;}

    [Required]
    public virtual string Key {get;set;}

    [Required]
    public virtual string Value {get;set;}
}

BillerSetting.cs

public class BillerSetting : FullAuditedEntity
{
    [Required]
    public virtual int? BillerId {get;set;}

    [Required]
    public virtual string Name {get;set;}

    [Required]
    public virtual string URL {get;set;}
}

然后,我创建了BillerDbContext,其中还包括BillerReference DbSet和BillerSetting DbSet。 然后,我创建了BillerRepository。 然后,我在应用程序层中创建了BillerServiceAppService类。 当我如下调用GetBiller(int Id)函数

public async Task<BillerForEdit> GetBiller(int Id)
{
    var biller = _billerRepo.GetAll()
        .Include(x => x.BillerReferences)
        .Include(x => x.BillerSettings)
        .where(x => x.Id==Id);
    //convert and assign data by ObjectMapper here !
    //but, when got Biller object, BillerReferences and BillerSettings are Count=0!

在上面的函数中,我得到了Biller,但这不是BillerReferencesBillerSetting

请帮助我:D

1 个答案:

答案 0 :(得分:0)

您的GetAll函数似乎可以通过使用context.Billers.ToList()之类的东西来全部获取。这两个列表将运行一个选择查询并调用数据。在此之后运行include将无法连接到数据库来获取您的BillerReferencesBillerSetting

根据您的使用情况,最简单的解决方案是像这样实现GetAll类:

public IQueryable<Billing> GetAll() => context.Billers;