假设我在模型中有2个类:User(映射到USERS表)和PrivilegedUser(继承User,其他信息存储在PRIVILEGEDUSERS表中).
现在,我在USERS(和User的实例)中有一行,需要将该用户转换为PrivilegedUser(即在PRIVILEGEDUSERS中创建具有相同Id的记录).有没有办法在没有删除/插入的情况下执行此操作?
问题是您在模型中没有PRIVILEGEDUSERS表示,因此您不能仅创建PrivilegedUser的那部分.
这只是一个例子.除普通用户属性外,PrivilegedUser可能还有一些折扣或个人经理或其他任何东西.同时,无论具体的用户类型如何,还有其他表需要引用用户.我已经使用Table-per-Type继承模式实现了它.在数据库级别,将用户从一种类型转换为另一种类型非常简单(您只需要从扩展表中插入或删除记录).但在EF中,您只有UserSet,它存储User和PrivilegedUser对象.这就是为什么我要问是可以用PrivilegedUser 替换现有的 User对象来保留现有的Id并且不从USERS表中删除记录.
假设以下层次结构:
class Department { EntityCollection<Employee> Employees; }
class Employee { string Name; }
class RemoteEmployee : Employee { Country Location; EntityReference<Country> CountryReference; }
Run Code Online (Sandbox Code Playgroud)
因此,部门包含员工列表.员工类型的层次结构,某些类型引用其他实体.我们假设我们需要向员工加载部门.好的,不是问题:
dataContext.Departments.Include("Employees")
Run Code Online (Sandbox Code Playgroud)
这将返回具体的员工类型(即远程员工的RemoteEmployee).现在我们需要使用远程员工加载位置.
dataContext.Departments.Include("Employees").Include("Employees.Location") - Error: no such property in Employee
dataContext.Departments.Include("Employees").Include("RemoteEmployees.Location") - Error: no such property in Department
Run Code Online (Sandbox Code Playgroud)
我应该在Include中使用RemoteEmployee加载位置?