Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET核心实体框架中的状态实体-建议的实现_C#_Asp.net Core_.net Core_Entity Framework Core - Fatal编程技术网

C# .NET核心实体框架中的状态实体-建议的实现

C# .NET核心实体框架中的状态实体-建议的实现,c#,asp.net-core,.net-core,entity-framework-core,C#,Asp.net Core,.net Core,Entity Framework Core,我对全栈软件开发还不熟悉,我的任务是在.NET Core中创建一个简单的全栈web应用程序,当涉及到后端部分时,它将存储一些员工数据。现在,假设我有一个雇员实体。我们还需要以某种方式实现员工的职位,员工可以拥有后端开发人员、前端开发人员、项目经理等职位。。这就是为什么我还创建了这个EmployeePosition类,以便Employee中有一个EmployeePosition属性。我还有其他类似的身份信息,比如应用程序中的EmployeePosition EmployeePosition将被植入

我对全栈软件开发还不熟悉,我的任务是在.NET Core中创建一个简单的全栈web应用程序,当涉及到后端部分时,它将存储一些员工数据。现在,假设我有一个雇员实体。我们还需要以某种方式实现员工的职位,员工可以拥有后端开发人员、前端开发人员、项目经理等职位。。这就是为什么我还创建了这个EmployeePosition类,以便Employee中有一个EmployeePosition属性。我还有其他类似的身份信息,比如应用程序中的EmployeePosition

EmployeePosition将被植入数据库中一个单独的表中,因此它可以适用于任何使用该应用程序的公司,只要使用不同的种子数据即可。我将使用遗留数据库进行种子设定

现在看来这是可行的,但对我来说也有点太粗糙了,因为每当我需要对存储库中的状态执行操作时,我都会使用状态的神奇Id号,或者在方法中的某个地方硬编码status Name属性,如果我没有更智能的解决方法来处理给定的操作,例如SwitchPosition.Name case前端:dostuff等

我能否就如何更好地实施这一点提出建议或指导,我在这方面进展顺利吗

在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; }      

不幸的是,您有相互冲突的需求。您说您的程序是状态不可知的:

EmployeePosition将被植入数据库中一个单独的表中,因此它可以适用于任何使用该应用程序的公司,只要使用不同的种子数据即可

然而,事实并非如此:

因为每当我需要对存储库中的状态执行操作时,我都会使用状态的神奇Id号,或者在方法中的某个位置硬编码状态名称属性,如果我没有更智能的方法来解决给定的操作,例如SwitchPosition.Name case front-end:do stuff等

因此,其中一项要求必须获得成功。要么您的代码知道不同的状态是什么,因此不同的种子数据不起作用,要么不起作用

如果第一个要求更重要:

保持代码原样,对于N个状态,您有一个完全合理的模型,这些状态在时间之前是未知的,也没有特定于给定条目的任何逻辑

如果第二个要求更重要:


切换到枚举。您不希望代码中出现神奇的数字或字符串。正如您所提到的,您需要将每个现有数据行映射到一个预定义的枚举成员中。

不幸的是,您的需求存在冲突。您说您的程序是状态不可知的:

EmployeePosition将被植入数据库中一个单独的表中,因此它可以适用于任何使用该应用程序的公司,只要使用不同的种子数据即可

然而,事实并非如此:

因为每当我需要对存储库中的状态执行操作时,我都会使用状态的神奇Id号,或者在方法中的某个位置硬编码状态名称属性,如果我没有更智能的方法来解决给定的操作,例如SwitchPosition.Name case front-end:do stuff等

因此,其中一项要求必须获得成功。要么您的代码知道不同的状态是什么,因此不同的种子数据不起作用,要么不起作用

如果第一个要求更重要:

保持代码原样,对于N个状态,您有一个完全合理的模型,这些状态在时间之前是未知的,也没有特定于给定条目的任何逻辑

如果第二个要求更重要:


切换到枚举。您不希望代码中出现神奇的数字或字符串。正如您所提到的,您需要将每个现有数据行映射到一个预定义的枚举成员中。

您可以做的是为员工职位创建一个枚举

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.
}

您可以做的是为员工职位创建枚举

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.
}

现在这更有意义了,我明白为什么了。有没有一种方法可以使用这个EnumBuilder类来实现这两个目的——创建一个我拥有的文件的枚举@阿米诺,我不明白这能给你带来什么。代码仍然需要知道或不需要知道实际值才能执行逻辑。我想,创建枚举可以节省一点写时间,但实际上,从现有数据创建枚举应该不会那么困难,尤其是如果有如下逻辑的话
你不会想要大规模的交换声明现在更有意义了,我明白为什么了。有没有一种方法可以使用这个EnumBuilder类来实现这两个目的——创建一个我拥有的文件的枚举@阿米诺,我不明白这能给你带来什么。代码仍然需要知道或不需要知道实际值才能执行逻辑。我想,创建枚举可以节省一点写时间,但实际上,从现有数据创建枚举并不难,特别是如果存在逻辑,因为您不需要大量的开关语句,您无法扩展位置列表,而不更改代码。可能可以,也可能不可以。如果不更改代码,则无法扩展职位列表。也许可以,也许不行。