小编Rus*_*ian的帖子

实体框架:继承,更改对象类型

假设我在模型中有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表中删除记录.

inheritance entity-framework

13
推荐指数
1
解决办法
3597
查看次数

实体框架:继承和包含

假设以下层次结构:

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加载位置?

inheritance entity-framework include

10
推荐指数
1
解决办法
4792
查看次数

标签 统计

entity-framework ×2

inheritance ×2

include ×1