假设具有两个实体的下一个数据模型场景:
BusinessRule
RuleType
使用Entity Framework 4.3,在MVC 3项目上使用模型第一种方法和T4 POCO模板映射模型。
现在,假设您在控制器类的“创建”方法中收到 BusinessRule 实例,但您需要根据与 GroupingName 相关联的属性更改行为使用业务规则的 RuleType 。
获取GroupingName值的最佳方法是什么?
到目前为止,我一直在考虑将 RuleType 属性映射为急切加载,但令我惊讶的是(我之前曾使用过nHibernate),似乎不可能。< / p>
是 datacontext 查询 RuleType (通过Id)的最佳方法,还是有更好的方法?
修改
我到目前为止的解决方案是:
public ActionResult Create(BusinessRule businessrule)
{
// It will be nice if I don't have to do this.
// I will be much happier if something like businessrule.RuleType.GroupingName
// would be possible
RuleType businessRuleRuleType = db.RuleType.Where(rt => rt.Id == businessrule.RuleTypeId).Single();
string businessRuleGroupingName = businessRuleRuleType.GroupingName;
}
所以,我希望这清楚表明使用包含(据我所知)不是一个选项。我也知道这个解决方案有效,但我不确定它是否是“最好的”,所以这就是问题。如果答案是“不,没有更好的方法”,那么,没关系。
答案 0 :(得分:0)
使用.Include()
扩展程序,可以使用实体框架进行切换加载。
在4.0中,这不是particularly elegant
MyObjectContext.BusinessRules.Where(br => br.Id = someId)
.Include("RuleType")
.FirstOrDefault();
在4.1及更高版本中现在是typed:
MyDbContext.BusinessRules.Where(br => br.Id = someId)
.Include(br => br.RuleType)
.FirstOrDefault();