代码之家  ›  专栏  ›  技术社区  ›  gvdm

无法从数据库读取链接数据

  •  1
  • gvdm  · 技术社区  · 6 年前

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

    CS

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

    主机板

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

    手动地,我在db中插入了一个元组 Host HostLine ,相应地连接它们。

    select Id, Name from [MyDB].dbo.Hosts;
    
    Id | Name
    -----------
    1  | Host1
    
    select Name, HostId from [MyDB].dbo.HostLines;
    
    HostId | Name
    ------------------
    1      | HostLine1
    

    这个 主航线 的FK到 宿主 如您在下面的屏幕截图所示,表已配置。

    enter image description here

    然后,我实现了一个简单的服务 AsyncCrudAppService 在两个 宿主 主航线 实体。

    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 以便查看从数据库中读取的数据(它将被删除)。 当我通过角度客户端调用服务的get rest方法时,我可以访问 MapToEntityDto() 方法,但是 宿主 实体没有 HostLines List 字段。 所以看起来 宿主 存储库没有从 主航线 表。

    我是否缺少某种配置来让 宿主 存储库同时读取 主航线 数据?

    谢谢你

    1 回复  |  直到 6 年前
        1
  •  1
  •   Alper Ebicoglu    6 年前

    您需要使用以下代码手动包含主机行。

    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