我想开始为我的项目使用Entity Framework。我们即将开始的一个新项目将有一个Employee表。我最初计划有一个IEmployee接口,它将由Manager和Staff类实现,它们将允许不同的功能,但都会将数据存储在Employee表中,表中的标志区分它们。
如果我使用DB First,并设计我的Employee表然后使用Entity Framework,我知道.tt文件将有一个部分类Employee。然后我可以创建自己的Manager和Staff类来实现部分类Employee。但是,我如何使用Entity Framework将其存储在数据库中呢?我可以做一些像
这样的事情// currentManager would be the manager object
dbContext.Emplyee.Add(currentManager);
dbContext.SaveChanges();
即使我将一个Manager对象传递给Employee进行保存,实体框架也可以这样做吗?或者有更好的方法吗?与检索相同,我如何使用Entity Framework来取回经理或员工?我是否需要首先让员工回来再投出?像
这样的东西var employee = from employees... // get employee
Manager currentManager = (Manager)employee;
答案 0 :(得分:2)
是的,您可以首先使用EF DB,并且具有从公共基类派生的多个类,这些类存储在同一个数据库表中。
您设想的“标志”被EF称为鉴别器。它是表中的一列,用于指定记录是实例的哪个子类型。
首先使用数据库,您需要调整EF生成的模型以使其正常工作,但这非常简单。我认为最简单的设置方法是
EmployeeType
。我认为这可以是任何类型,但int可以正常工作。Manager
的{{1}}实体。重复Employee
您的设计师应如下所示: Staff.
并添加当EmployeeType = 1 时的条件。对员工执行相同操作,但进行映射当EmployeeType = 2 时。 Employee
映射中删除 EmployeeType
属性。完成后,您可以扩展Employee
和Manager
类(现在将由EF生成为部分类)以获得您想要的任何业务逻辑,并使用EF执行查询/等通过Staff
映射:
Employees