首页 > 解决方案 > 从具有外键 C# 实体框架的表中获取数据

问题描述

我在 Code First asp.net 中有这个类

public class Account
    {
        [Key]
        public int Id { get; set; }
        [Column(TypeName = "nvarchar(100)")]
        public string AccountTitle { get; set; }
        public Classification Classification { get; set; }
    }

    public class Classification 
    { 
        [Key]
        public int Id { get; set; }
        [Column(TypeName = "nvarchar(100)")]
        public string TitleClassification { get; set; }

        public ICollection<Account> Accounts { get; set; }
    }

    public class ClassificationDto
    {
        public int Id { get; set; }
        public string TitleClassification { get; set; }
    }

在我的数据库上下文中

public DbSet<Account> Accounts { get; set; }

AccountingManager.FindAll 是这个

public IQueryable<T> FindAll()
        {
            return context.Set<T>().AsNoTracking().AsQueryable();
        }

我试图获得只有 3 的“分类”,但我也获得了与此代码关联的“帐户”:

[HttpGet]
        [Route("get-classification")]
        [Authorize]
        public async Task<IActionResult> GetAccountClassification()
        {
            List<ClassificationDto> classificationList = new List<ClassificationDto>();

            var accountingManager = new AccountingManager(context);

            var list = accountingManager.FindAll();

            classificationList = await list.Select(s => new ClassificationDto
            {
                Id = s.Classification.Id,
                TitleClassification = s.Classification.TitleClassification,
            }).ToListAsync();

            return StatusCode(StatusCodes.Status200OK, classificationList);
        }

这就是我桌子上的样子 在此处输入图像描述

标签: c#entity-framework-core

解决方案


如果要从分类表中获取所有行,

public DbSet<Classification> Classifications { get; set;}属性添加到您的DbContext班级。然后实现类似的FindAll()方法:

return context.Classifications.AsNoTracking().ToList()

推荐阅读