首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在.NET核心API中设计嵌套类以获得特定的模式?

如何在.NET核心API中设计嵌套类以获得特定的模式?
EN

Stack Overflow用户
提问于 2020-08-20 15:15:12
回答 1查看 261关注 0票数 1

我是第一次在.NET核心应用程序接口中使用实体框架(使用最新版本的.NET核心)。

目前我有两个课程:

代码语言:javascript
复制
public class Employee
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Gender { get; set; }
    public DateTime JoinedCompany { get; set; }
    public ICollection<Skill> Skills { get; set; }
}

public class Skill
{
    public int Id { get; set; }
    public string SkillName { get; set; }
}

我还有一个DBContext类,它包含

代码语言:javascript
复制
public DbSet<Employee> Employees { get; set; }
public DbSet<Skill> Skills { get; set; }

我可以用下面的代码来检索它:

代码语言:javascript
复制
public async Task<IReadOnlyList<Employee>> GetEmployeesAsync () {
            return await _context.Employees
            .Include(p => p.Skills)
            .ToListAsync();
        }

现在,我使用实体框架迁移来创建表。使用现有的类,我得到了下面的表和两个表:

(1) "Employees“,列为: Id,FirstName,LastName,Gender,JoinedCompany

(2)“技能”,列为: Id、SkillName、EmployeeId

我用一些数据填充了这些表,并在postman中访问API的一个端点时返回了以下内容:

代码语言:javascript
复制
[
    {
        "firstName": "Jess",
        "lastName": "Turner",
        "gender": "F",
        "joinedCompany": "2018-10-04T00:00:00",
        "skills": [
            {
                "skillName": "T-SQL",
                "id": 1
            },
            {
                "skillName": "Angular",
                "id": 2
            },
            {
                "skillName": "Vue",
                "id": 3
            },
            {
                "skillName": "Redux",
                "id": 4
            }
        ],
        "id": 1
    },
    {
        "firstName": "Olivia",
        "lastName": "Lu",
        "gender": "F",
        "joinedCompany": "2015-03-31T00:00:00",
        "skills": [
            {
                "skillName": "Hadoop",
                "id": 5
            },
            {
                "skillName": "Azure Databricks",
                "id": 6
            },
            {
                "skillName": "Spark",
                "id": 7
            },
            {
                "skillName": "Python",
                "id": 8
            },
            {
                "skillName": "T-SQL",
                "id": 9
            }
        ],
        "id": 2
    },
    {
        "firstName": "Jonah",
        "lastName": "Smythe",
        "gender": "M",
        "joinedCompany": "2020-08-11T00:00:00",
        "skills": [],
        "id": 3
     }
]

现在,我试图弄清楚的是如何设计类,以便在运行时使用实体框架创建数据库,这样我就可以得到三个表:

(1) "Employees“,列为: Id,FirstName,LastName,Gender,JoinedCompany

(1) "EmployeeSkills“,列为: Id,EmployeeId,SkillId

(2)“技能”,列: Id,SkillName

原因是我不想在每次为员工出现"SkillName“字符串时反复存储它。我只想用身份证。这也会改变我上面应用的GetEmployeesAsync方法。谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-20 15:52:10

代码语言:javascript
复制
public class Employee
{
    public int Id { get; set; }

    public string FirstName { get; set; }

    public string LastName { get; set; }

    public string Gender { get; set; }

    public DateTime JoinedCompany { get; set; }

    public ICollection<EmployeeSkill> Skills { get; set; } = new HashSet<EmployeeSkill>();
}

public class Skill
{
    public int Id { get; set; }

    public string SkillName { get; set; }

    public ICollection<EmployeeSkill> Emploees { get; set; } = new HashSet<EmployeeSkill>();
}

public class EmployeeSkill
{
    public int EmployeeId { get; set; }

    public Employee Employee { get; set; }

    public int SkillId { get; set; }

    public Skill Skill { get; set; }
}

public class MyDbContext : DbContext
{

    public DbSet<Employee> Employees { get; set; }

    public DbSet<Skill> Skills { get; set; }

    public DbSet<EmployeeSkill> EmployeesSkills { get; set; }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63500040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档