使用外键关系时,EF Core会返回一个记录,其中包含许多内容

时间:2016-12-04 15:40:37

标签: entity-framework asp.net-core entity-framework-core asp.net-core-webapi

我有一个数据库,用于存储以前两个项目 - FacilityRevenue和DoctorRevenue的设施,医生和收入数据。还有FaciltyMaster和DoctorMaster表与FacilityRevenue和DoctorRevenue表有一对多的关系。也就是说,一个医生或设施主记录与FacilityRevenue和DoctorRevenue表中的许多DoctorId或FacilityId记录相关。我试图建立外键关系,以便DoctorRevenue上的DoctorId与DoctorMaster上的DoctorId相关,FacilityRevenue上的FacilityId与FaclityMaster上的FacilityId相关。但是,我并不相信Entity Framework正在这样阅读。

每种模型如下:

public partial class FacilityMaster
{
    public FacilityMaster()
    {
        DoctorRevenue = new HashSet<DoctorRevenue>();
        FacilityRevenue = new HashSet<FacilityRevenue>();
    }

    [Key]
    public int FacilityId { get; set; }
    public string FacilityName { get; set; }

    public virtual ICollection<DoctorRevenue> DoctorRevenue { get; set; }
    public virtual ICollection<FacilityRevenue> FacilityRevenue { get; set; }
}

public partial class DoctorMaster
{
    public DoctorMaster()
    {
        DoctorRevenue = new HashSet<DoctorRevenue>();
    }

    [Key]
    public int DoctorId { get; set; }
    public string DoctorName { get; set; }
    public string DoctorSpecialty { get; set; }

    public virtual ICollection<DoctorRevenue> DoctorRevenue { get; set; }
}



 public partial class DoctorRevenue
{
    [Key]
    public int RecordId { get; set; }
    public int DoctorId { get; set; }
    public int FacilityId { get; set; }
    public string FacilityName { get; set; }
    public string DoctorName { get; set; }
    public DateTime? Date { get; set; }
    public decimal? DoctorInvoices { get; set; }
    public decimal? TotalRevenue { get; set; }

    public virtual DoctorMaster Doctor { get; set; }
    public virtual FacilityMaster Facility { get; set; }
}

public partial class FacilityRevenue
{
    [Key]
    public int RecordId { get; set; }
    public int FacilityId { get; set; }
    public string FacilityName { get; set; }
    public DateTime Date { get; set; }
    public decimal? TotalInvoices { get; set; }
    public decimal? TotalRevenue { get; set; }

    public virtual FacilityMaster Facility { get; set; }
}

我已部分配置了FacilityRevenueRepository,如下所示:

public IEnumerable<FacilityRevenue> GetFacRevenues(Int32 pageSize, Int32 pageNumber, String name)
    {
        var query = _context
            .Set<FacilityRevenue>()
            .AsQueryable()
            .Skip((pageNumber - 1) * pageSize)
            .Take(pageSize);
        if (!String.IsNullOrEmpty(name))
        {
            query = query.Where(item => item.FacilityName.Contains(name));
        }
        return query;
    }

我的FacilityRevenueController的相关部分如下:

[HttpGet]
    [Route("GetFacilityRevenues")]
    public async Task<IActionResult> GetFacilityRevenues(Int32? pageSize = 10, Int32? pageNumber = 1, String FacilityName = null)
    {
        var response = new ListModelResponse<FacRevViewModel>() as IListModelResponse<FacRevViewModel>;

        try
        {
            response.PageSize = (Int32)pageSize;
            response.PageNumber = (Int32)pageNumber;

            response.Model = await Task.Run(() =>
            {
                return FacilityRevenueRepository
                .GetFacRevenues(response.PageNumber, response.PageSize, FacilityName)
                .Select(item => item.ToViewModel())
                .ToList();
            });
            response.Message = String.Format("Total Records {0}", response.Model.Count());
        }
        catch (Exception ex)
        {
            response.DidError = true;
            response.ErrorMessage = ex.Message;
        }
        return response.ToHttpResponse();
    }

DbContext如下:

    public partial class ERPWAGDbContext : DbContext
    {
    public ERPWAGDbContext(DbContextOptions<ERPWAGDbContext> options)
        :base(options)
    { }

    public DbSet<DoctorMaster> Doctors { get; set; }
    public DbSet<FacilityMaster> Facilities { get; set; }
    public DbSet<DoctorRevenue> DoctorRevenue { get; set; }
    public DbSet<FacilityRevenue> FacilityRevenue { get; set; }

    }

当我使用dotnet run运行时,Postman只返回GetFacilityRevenues的一条记录,其中预计会有数百条记录。

当我的GetFacilities和GetDoctors API方法被调用时,如何确保返回给定设施的所有记录,同样对医生也是如此?

0 个答案:

没有答案