[英]EF6 Code first navigation property with custom association
我想先使用EF代码来处理不是基于键而是基于实体的属性值之一的自定义关联(或导航属性)。
我的课是这些
public class MyConfig
{
public int Id { get; set; }
public int InstanceNumber { get; set; }
public bool IsValid { get; set; }
public int Code { get; set; }
}
public class MyAsset
{
public int Id { get; set; }
public string Name { get; set; }
public List<MyConfig> MyConfigs { get; set; }
public int InstanceValue { get; set; }
}
所以我想在任何MyAsset实体上收集MyConfig实体。 从数据库加载MyAsset实体时,我希望它包含MyConfig实体的列表,其“ InstanceNumber”中的值与MyAsset实体的InstanceValue相匹配。
我可以先使用EF6代码吗? 我已经阅读了有关覆盖EF内置约定的内容,但是我只能找到适用于特定主键的解决方案。
以上完全有意义吗?
好吧,我可以看到为什么要执行此操作,但是当前唯一的选择是使用Include扩展方法并获取所有MyConfig实例,然后您需要像这样查询的MyAsset实例中过滤MyConfig实例的列表:
public class MyAssetRepository : IMyAssetRepository
{
public MyAsset Get(int assetId)
{
using (var context = new AssetContext())
{
var selectedAsset = context.MyAssets.Include(a => a.MyConfigs).Single(a => a.Id == assetId);
selectedAsset.MyConfigs = selectedAsset.MyConfigs
.Where(c => c.InstanceNumber == selectedAsset.InstanceValue)
.ToList();
return selectedAsset;
}
}
}
就像在此示例中一样,获取MyAsset实例被封装在存储库中,因此获取具有MyConfig实体的MyAsset实例的逻辑被封装并从存储库外部的代码中隐藏。
当然,将出现获取所有MyConfig实体的开销,这可以通过使用接受过滤器参数的Include扩展方法来解决,但是当前不存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.