如何解决如何在.NET Core API中设计嵌套类以获取特定的架构?
我第一次在.NET Core API(使用最新版本的.NET Core)中使用Entity Framework。
目前我有2节课:
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
类,
public DbSet<Employee> Employees { get; set; }
public DbSet<Skill> Skills { get; set; }
,我可以使用以下内容检索此信息:
public async Task<IReadOnlyList<Employee>> GetEmployeesAsync () {
return await _context.Employees
.Include(p => p.Skills)
.ToListAsync();
}
现在,我正在使用Entity Framework迁移来创建表。使用现有的类,我得到以下表格两个表格:
(1)带有以下列的“雇员”:Id,名字,姓氏,性别,JoinedCompany
(2)具有以下各项的“技能”:Id,SkillName,EmployeeId
我在这些表中填充了一些数据,并在邮递员中访问API的其中一个端点时返回了以下内容:
[
{
"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","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)带有以下列的“雇员”:Id,名字,姓氏,性别,JoinedCompany
(1)带有以下列的“ EmployeeSkills”:Id,EmployeeId,SkillId
(2)包含以下各项的“技能”:Id,SkillName
原因是我不想为雇员每次都重复存储“ SkillName”字符串。我只想使用ID。
这也将改变我上面应用的GetEmployeesAsync
方法。
谢谢。
解决方法
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; }
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。