首页 > 解决方案 > .NET Core Entity Framework 中的状态实体 - 建议的实现

问题描述

我是全栈软件开发的新手,我有一个任务是在 .NET Core、Entity Framework Core(当涉及到后端部分)中创建一个简单的全栈 Web 应用程序,它将存储一些员工数据。现在,假设我有一个 Employee 实体。我们还需要以某种方式实现员工的职位(员工可以担任后端开发人员、前端开发人员、项目经理等职位)。这就是为什么我还创建了这个 EmployeePosition 类,以便在 Employee 中有一个 EmployeePosition 属性。我还有其他类似的状态实体,例如应用程序中的 EmployeePosition。

然后 EmployeePosition 将被播种到数据库中的一个单独的表中,因此它可以适用于“将使用”这个应用程序的任何公司(只需使用不同的种子数据)。我将使用旧数据库进行播种。

现在看来这可行,但对我来说似乎也有点太粗略了,因为每当我需要对存储库中的状态进行操作时,我都会使用状态的魔法 ID 号或硬编码方法中某处的状态名称属性(如果我没有针对给定操作的更智能的解决方法),例如“Switch(Position.Name) case “front-end”:do stuff”等。

我能否就如何更好地实施这一点获得建议或指导,我在这里走得好吗?

在 EmployeePosition 中实际使用枚举作为数据类型会更好,关于如何实现它的任何建议?考虑到我必须使用旧数据库进行播种,我将不得不以某种方式从旧文件中创建我的枚举。

public class Employee
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string FirstName { get; set; }
        [Required]
        public string LastName { get; set; }
        [Required]
        public string Image { get; set; }
        [Required]
        public string Email { get; set; }
        [Required]
        public string Phone { get; set; }
        [Required]
        public EmployeePosition Position { get; set; }      
public class EmployeePosition
    {
        [Key]
        public int Id { get; set; }
        [Required]
        public string Name { get; set; }
    }

标签: c#asp.net-core.net-coreentity-framework-core

解决方案


您可以做的是Enum为员工职位创建一个。

public enum EmployeePosition
{
   Backend = 0,
   Frontend = 1,
   DBA = 2,
}

还有你的员工实体

public class Employee
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public string Image { get; set; }
    [Required]
    public string Email { get; set; }
    [Required]
    public string Phone { get; set; }
    [Required]
    public EmployeePosition Position { get; set; } 
}

然后你可以使用

If (Employee.Position == EmployeePosition.Backend)
{
     // your logic.
}

推荐阅读