0

假设下一个具有两个实体的数据模型场景:

商业规则

  • 标识:整数
  • 名称:字符串
  • 规则:字符串
  • 规则类型:规则类型

规则类型

  • 标识:整数
  • 名称:字符串
  • 分组名称:字符串

该模型使用 Entity Framework 4.3 与模型优先方法和 T4 POCO 模板在 MVC 3 项目上进行映射。

现在,假设在控制器类的“Create”方法中您收到一个BusinessRule实例,但您需要根据与业务规则的RuleType关联的GroupingName属性更改行为。

获取 GroupingName 值的最佳方法是什么?

到目前为止,我一直在考虑将RuleType属性映射为预加载,但令我惊讶的是(我以前曾与 nHibernate 合作过),这似乎是不可能的。

仅查询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; 
}

所以,我希望这清楚地表明使用Include(据我所知)不是一种选择。我也知道这个解决方案有效,但我不确定它是否是“最好的”,所以这就是问题。如果答案是“不,没有更好的方法”,好吧,没关系。

4

1 回答 1

0

.Include()使用扩展,实体框架绝对可以进行急切加载。

在 4.0 中,这并不是特别优雅

MyObjectContext.BusinessRules.Where(br => br.Id = someId)
                         .Include("RuleType")
                         .FirstOrDefault();

在 4.1 及更高版本中,现在键入

MyDbContext.BusinessRules.Where(br => br.Id = someId)
                         .Include(br => br.RuleType)
                         .FirstOrDefault();
于 2012-09-11T15:56:35.927 回答