0

2 つのエンティティを持つ次のデータ モデル シナリオを想定します。

ビジネスルール

  • Id : 整数
  • 名前:文字列
  • ルール: 文字列
  • ルールの種類: ルールの種類

ルールの種類

  • Id : 整数
  • 名前:文字列
  • GroupingName : 文字列

モデルは、MVC 3 プロジェクトで、モデル ファースト アプローチと T4 POCO テンプレートを使用して Entity Framework 4.3 を使用してマップされます。

ここで、コントローラー クラスの「Create」メソッドでBusinessRuleインスタンスを受け取りますが、ビジネス ルールのRuleTypeに関連付けられたGroupingNameプロパティに応じて動作を変更する必要があるとします。

GroupingName の値を取得するための最適な方法は何ですか?

これまで、 RuleTypeプロパティを熱心な読み込みとしてマッピングするようなことを考えてきましたが、驚いたことに (以前に nHibernate で作業したことがあります)、それは不可能のようです。

RuleTypeの datacontext を( 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を使用することはオプションではないことが明確になることを願っています。また、このソリューションが機能することは知っていますが、それが「最善」であるかどうかはわかりません。それが問題です。答えが「いいえ、他に方法はありません」の場合は、OK、大丈夫です。

4

1 に答える 1

0

.Include()拡張機能を使用すると、Entity Framework で一括読み込みが確実に可能になります。

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 に答える