我使用单独的表来保存彼此继承的对象。我的设置是这样的:
public class User : Entity { /*...*/ }
public class Employee : User { /* ... */ }
在数据库中,这意味着我有一个表Users
,其中Guid
为主键,表Employees
的列为UserId
作为主键/外键。这部分有效。我可以使用Entity Framework上下文来获取和设置实体。
我还有以下对象和映射:
public class UserDto : EntityDto { /*...*/ }
public class EmployeeDto : UserDto { /*...*/ }
Mapper.CreateMap<Entity, EntityDto>();
Mapper.CreateMap<User, UserDto>().IncludeBase<Entity, EntityDto>();
Mapper.CreateMap<Employee, EmployeeDto>().IncludeBase<User, UserDto>();
当我找到我的员工时,我有时会收到错误:Unable to cast object of type 'MyNamespace.UserDto' to type 'MyNamespace.EmployeeDto'
。错误将在下面的映射行中抛出。它真的很奇怪,因为错误只会被抛出。当它扔掉它时,我还没有找到一种模式。
public EmployeeDto GetById(Guid id)
{
var dbEmployee = getById(id);
return Mapper.Map<EmployeeDto>(dbEmployee);
}