16

Entity Framework の基本を理解しようとしていますが、DbContext の Set<> メソッドについて質問があります。次の質問では、データベース ファースト モデルを使用しています。

たとえば、メッセージ (たとえば、NLog メッセージ) を引き出すために使用できる ActivityLog データベースがあるとします。次のようなすべてのメッセージを引き出すコードを書くことができます。

using (var entities = new ActivityLogEntities())
    foreach (var log in entities.AcitivityLogs)
        Console.WriteLine(log.Message);

ただし、これを行うことで同じことを達成することもできます:

using (var entities = new ActivityLogEntities())
    foreach (var message in entities.Set<ActivityLog>().Select(entity => entity.Message))
        Console.WriteLine(message);

私の質問は、これら2つのステートメントの違いは何ですか? どちらか一方を使用する方が適切なのはいつですか? それとも、これは単に個人的な好みの問題ですか?

4

3 に答える 3

13

大きな違いはありません。最初のケースでは、次のようなものがあります。

class MyContext : DbContext
{
    public DbSet<AcitivityLog> AcitivityLogs { get; set; }
}

コンテキストが作成されると、パブリックなDbSet<T>読み取り/書き込みプロパティが検索され、次のようになります (疑似コード)。

dbSetProperty = Set<EntityType>();

ただし、次の場合があります。

1) すべてのエンティティ タイプのパブリック プロパティを作成したくない。
2) コンテキストの設計時にすべてのエンティティ タイプを把握しているわけではありません。

これらの場合Set<T>、適切なエンティティ セットを取得する唯一の方法です。

于 2013-06-07T12:52:06.913 に答える