C# .NET核心实体框架中的状态实体-建议的实现
我对全栈软件开发还不熟悉,我的任务是在.NET Core中创建一个简单的全栈web应用程序,当涉及到后端部分时,它将存储一些员工数据。现在,假设我有一个雇员实体。我们还需要以某种方式实现员工的职位,员工可以拥有后端开发人员、前端开发人员、项目经理等职位。。这就是为什么我还创建了这个EmployeePosition类,以便Employee中有一个EmployeePosition属性。我还有其他类似的身份信息,比如应用程序中的EmployeePosition EmployeePosition将被植入数据库中一个单独的表中,因此它可以适用于任何使用该应用程序的公司,只要使用不同的种子数据即可。我将使用遗留数据库进行种子设定 现在看来这是可行的,但对我来说也有点太粗糙了,因为每当我需要对存储库中的状态执行操作时,我都会使用状态的神奇Id号,或者在方法中的某个地方硬编码status Name属性,如果我没有更智能的解决方法来处理给定的操作,例如SwitchPosition.Name case前端:dostuff等 我能否就如何更好地实施这一点提出建议或指导,我在这方面进展顺利吗 在EmployeePosition中实际使用枚举作为数据类型会更好吗?关于如何实现它有什么建议吗?考虑到我必须使用遗留数据库进行种子设定,我必须以某种方式从遗留文件中创建枚举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将被植入
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类来实现这两个目的——创建一个我拥有的文件的枚举@阿米诺,我不明白这能给你带来什么。代码仍然需要知道或不需要知道实际值才能执行逻辑。我想,创建枚举可以节省一点写时间,但实际上,从现有数据创建枚举并不难,特别是如果存在逻辑,因为您不需要大量的开关语句,您无法扩展位置列表,而不更改代码。可能可以,也可能不可以。如果不更改代码,则无法扩展职位列表。也许可以,也许不行。