efバージョン 6.1.3 および Unity リポジトリを使用して asp.net mvc5で作業します。SmartDevice の基本タイプとSmartRainbow、SmartRouter、SmartSwitchの3 つの派生タイプを持つモデルがあるとします。以下のように:
private readonly IRepositoryAsync<SmartDevice> _smartDeviceRepository;
コンストラクターには以下の構文があります
_smartDeviceRepository = unitOfWork.RepositoryAsync<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
}
スマートスイッチ
public class SmartSwitch : SmartDevice
{
#region Navigation Properties
public virtual ICollection<Channel> Channels { get; set; }
#endregion
}
スマートレインボー
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のタイプになることです。単一の継承されたタイプ プロパティとナビゲーション プロパティをロードできません。
以下の構文を使用して、ナビゲーション プロパティの読み込みに失敗しました
var temp = _smartDeviceRepository.Query().Select().OfType<SmartSwitch>().ToList();
- SmartSwitchプロパティチャネルを読み込めませんか?
- OfTypeメソッドの後にincludeを使用できませんか?
- OfTypeの後にincludeできないのはなぜですか?