C# 通过应用OOPS的最佳用途处理场景
在我的场景中,我有两个表,比如员工和经理。使用第一种方法 下面是Employee和Manager类,表示Employee和Manager表对象C# 通过应用OOPS的最佳用途处理场景,c#,oop,C#,Oop,在我的场景中,我有两个表,比如员工和经理。使用第一种方法 下面是Employee和Manager类,表示Employee和Manager表对象 public abstract class BaseEmployee { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public long Id { get; set; } public long EmployeeId { get; set; }
public abstract class BaseEmployee
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long Id { get; set; }
public long EmployeeId { get; set; }
public string Address { get; set; }
}
[Table("Employees", Schema = "EmployeeData")]
public partial class Employee: BaseEmployee
{
}
[Table("Managers", Schema = "EmployeeData")]
public partial class Manager: BaseEmployee
{
[Column("ManagerId")]
public override long EmployeeId { get; set; }
}
}
下面是代码片段;我正在根据员工是否为经理,将记录保存在Employees and Managers表中
BaseEmployee employeeRow;
if (IsManager)
{
Manager= new Manager();
}
else
{
employeeRow= new Employee();
}
//Do some stuff
if (IsManager)
{
context.Managers.Add(employeeRow as Manager);
context.SaveChanges();
}
else
{
context.Employees.Add(employeeRow as Employee);
context.SaveChanges();
}
在这里,一切正常。现在我想在两个表中保存经理,即经理表和员工表
我想做如下事情:
if (IsManager)
{
context.Managers.Add(employeeRow as Manager);
context.Employees.Add(employeeRow as Employees); // throw errors
context.SaveChanges();
}
else
{
context.Managers.Add(employeeRow as Employee);
context.SaveChanges();
}
但在这里,当将employeeRow转换为employeeRow时会抛出异常,这一点很明显,因为我们在使用Manager类实例化employeeRow。我可以通过创建一个Employee类型的对象与Manager对象并行来处理这种情况,但这种方法对我来说并不正确
有谁能建议我如何最好地使用OOPS来处理这个场景吗
谢谢。也许您可以将
DbSet
更改为BaseEmployee
类型,而不是Employees
?或者让经理从Employees
继承,而不是baseemployeep
。感谢Jurgen的回复。我试图从Employee继承Manager,但它并没有在employees表中保存记录,而是保存在Managers表中。这似乎是由于Employee和Manager表上应用了表和架构属性。。。处理此情况的任何建议。也许您可以将DbSet
更改为BaseEmployee
类型,而不是Employees
?或者可能使Manager
从Employees
继承,而不是baseemployeep
。感谢Jurgen的回复。我试图从Employee继承Manager,但它并没有在employees表中保存记录,而是保存在Managers表中。这似乎是由于Employee和Manager表上应用了表和架构属性。。。任何处理这种情况的建议。