无法从DB读取链接数据

时间:2018-06-14 10:45:21

标签: c# .net aspnetboilerplate

我已经配置了这两个实体:

Host.cs

public class Host : FullAuditedEntity<int>
{
    [Required]
    public string Name { get; set; }

    public List<HostLine> HostLines { get; set; }
}

HostLine.cs

public class HostLine: FullAuditedEntity<int>
{
    [Required]
    public string Name { get; set; }

    public Host Host { get; set; }
}

手动,我在数据库中插入了HostHostLine的一个元组,并相应地链接它们。

select Id, Name from [MyDB].dbo.Hosts;

Id | Name
-----------
1  | Host1

select Name, HostId from [MyDB].dbo.HostLines;

HostId | Name
------------------
1      | HostLine1

HostLineHost表的FK已配置,如下面的屏幕截图所示。

enter image description here

然后,我实现了一个扩展AsyncCrudAppService的简单服务,以便在HostHostLine实体上提供CRUD操作。

public class HostsAppService : AsyncCrudAppService<Host, HostDto, int, PagedResultRequestDto, CreateHostDto, HostDto>, IHostsAppService
{

    public HostsAppService(IRepository<Host> repository)
       : base(repository)
    {
    }

    protected override HostDto MapToEntityDto(Host entity)
    {
        return base.MapToEntityDto(entity);
    }

}

我将覆盖添加到方法MapToEntityDto,以便查看从数据库中读取的数据(它将被删除)。 当我通过Angular客户端调用服务的Get REST方法时,我可以使用MapToEntityDto()方法,但Host实体没有HostLines List的值领域。 所以Host存储库似乎没有从HostLine表中读取链接数据。

我是否缺少某种配置让Host存储库也读取HostLine数据?

谢谢

1 个答案:

答案 0 :(得分:1)

您需要使用以下代码手动包含HostLines。

public class TaskAppService : AsyncCrudAppService<Host, HostDto, int, PagedResultRequestDto, CreateHostDto, HostDto>, IHostsAppService
{

//...
    protected override IQueryable<Task> CreateFilteredQuery(GetAllTasksInput input)
    {
        return base.CreateFilteredQuery(input).Include(x=>x.HostLines);
    }

//...

}

更多信息请参阅https://aspnetboilerplate.com/Pages/Documents/Application-Services#crud-permissions