使用 ef 版本6.1.3和Unity存储库在asp.net mvc5 上工作。假设有一个 base 类型的模型 SmartDevice 和三种派生类型 SmartRainbow , SmartRouter , SmartSwitch 。像吼叫:
private readonly IRepositoryAsync<SmartDevice> _smartDeviceRepository;
构造函数具有下列语法
_smartDeviceRepository = unitOfWork.RepositoryAsync<SmartDevice>();
SmartDevice
public class SmartDevice : Entity
{
#region Primitive Properties
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DeviceId { get; set; }
public DeviceType DeviceType { get; set; }
#endregion
#region Navigation Properties
public virtual ICollection<DeviceStatus> DeviceStatus { get; set; }
#endregion
}
SmartSwitch
public class SmartSwitch : SmartDevice
{
#region Navigation Properties
public virtual ICollection<Channel> Channels { get; set; }
#endregion
}
SmartRainbow
public class SmartRainbow : SmartDevice
{
#region Navigation Properties
public virtual ICollection<RgbwStatus> RgbwStatuses { get; set; }
#endregion
}
通过查询 SmartDevice ,我得到了所有实体,我的语法如下:
var temp = _smartDeviceRepository.Query().Select().ToList();
问题是通过以上结果的每个实体将是类型 SmartRainbow 或 SmartRouter 或 SmartSwitch 我无法加载任何单个继承的类型属性和导航的主题。
使用bellow语法我无法加载导航属性
var temp = _smartDeviceRepository.Query().Select().OfType<SmartSwitch>().ToList();