6

私は Entity Framework を初めて使用しますが、何かを誤解しているか、何か間違っている可能性があります。

特定の人のタスクのリストを取得するための私のコード:

 public List<TaskObject> GetAssignedTasks(int personId)
        {
            var items = (from s in _te.tasks where s.person.person_id == personId select s).ToList();
            var tasks = new List<TaskObject>();
            foreach (var t in items)
            {

                TaskObject tk = Transformer.UnpackTask(t);

                tasks.Add(tk);
            }
            return tasks;
        }

私の問題は、レコードのリストを取得しているように見えますが、関連するアイテムが読み込まれていないことです。私の 'Transformer.UnpackTask' メソッドは、ロードしたタスク エンティティを受け取り、ビジネス/サービス レイヤーを介して UI に到達する別のオブジェクトに変換します。

しかし、Unpacker 関数が関連オブジェクトであるアイテムを参照しようとするとすぐに (たとえば、タスクには、個人の詳細を持つ Person エンティティを持つ「AssignedPerson」があります。しかし、私のエンティティの AssignedPerson プロパティは NULL です。私は考えました関連するアイテムをロードします。

私は誤解していますか?

4

3 に答える 3

5

Include() メソッドを使用して参照を明示的に含める必要があります。これには 2 つのオーバーロードがあります。1 つはプロパティをラムダ式として受け取り、もう 1 つはロードするパスを文字列として受け取ります (コレクションで使用可能なオブジェクトの参照をロードする必要がある場合に役立ちます)。

MSDN リファレンス

于 2012-08-19T08:44:34.963 に答える
0

これを試して。ここでやろうとしているのは、関連するエンティティを選択クエリ自体に含めること、つまり遅延読み込みです。そのため、タスクを解凍するときに、関連するエンティティも取得できるはずです。

確認事項:

  • タスク エンティティには、個人エンティティへの参照機能が必要です。そうでない場合、これは失敗します。
  • サービス レイヤーのメタデータ ファイルで、タスクのメタデータ内の個人エンティティの上に [Include] キーワードを追加します。

-- たとえば、作成したサービスのメタデータ ファイル。

tasks metadata
 {
 ... 
 ... 

  \\these two should already be there you will just have to add the Include and
  \\ Key attribute.

    [Include]
    public EntityCollection<Person> Person {get; set;}
    [Key]  \\ that connects the task and person entity (FK/PK)
    public int PersonID {get;set;}
}

サービスファイル

public List<TaskObject> GetAssignedTasks(int personId)
    {
        var items = (from s in _te.tasks.Include("Person") where s.person.person_id == personId select s).ToList();
        var tasks = new List<TaskObject>();
        foreach (var t in items)
        {

            TaskObject tk = Transformer.UnpackTask(t);

            tasks.Add(tk);
        }
        return tasks;
    }

それが役に立てば幸い。乾杯

于 2012-08-19T10:17:15.600 に答える
0

あなたが探しているのは.Include、このように使用することです

var recordWithParentAttached = db.Tasks.Include(o => o.Person).Single(o => o.person_id == personId);

.Include親 (または関連するレコード) がある場合は添付されて渡されますが、そうでない場合はnulls.

于 2014-12-19T09:18:44.587 に答える