1

私はすでに答えを知っていると確信していますが、他の人に確認してもらう必要があります。問題は、Entity Framework: Code First での DbSet の使用に関するものです。(C#を使用)

これらの小さなクラスを例として使用しましょう。

class TopClass
{
    Public List<ExampleA> ListOne {get; set;}
    Public List<ExampleB> ListTwo {get; set;}

    //Other contents ...
}

class ExampleA
{
    Public List<ExampleC> ListTree {get; set;}

    //Other contents ...
}

class ExampleB
{
    //Contents ...
}

class ExampleC
{
    //Contents ...
}

したがって、TopClass には ExampleA と ExampleB という名前のクラスのリストがあり、ExampleA には ExampleC のリストがあります。

DbContext から継承するクラスは次のようになります。

class ExampleContext : DbContext
{
    public DbSet<TopClass> TopClasses {get; set}

    //Other contents..
}

端的に言えば、TopClass 用の DbSet だけがあります。Topclasses のオブジェクトはデータベースに保存できます。また、TopClass-objects / ExampleA-object のリストに入れられた ExampleA、ExampleB、および ExampleC のオブジェクトもデータベースに保存されます。データベースから TopClass オブジェクトをロードすると、リストにあった他のすべてのオブジェクトもロードされます。つまり、TopClass のオブジェクトを介して、データベースに保存された他のオブジェクトにアクセスできます。

ここで、私の同僚と話し合ってきた質問があり
ます。TopClass オブジェクトと他のすべての関連オブジェクトをロードせずに (また、SQL コーディングやラムダを使用せずに)、ExampleA のオブジェクトに直接アクセスしたい場合式)、ExampleA には DbSet が必要ですか? または、DbSet からの読み込みを減らして、必要なオブジェクトのみを含めることは可能ですか? はいの場合、TopClass をロードせずに ExampleA のオブジェクトをロードすることさえ可能ですか?

いくつかの答えは明らかだと思います。私自身、TopClass オブジェクトをロードせずに、データベース内のそのクラスのオブジェクトに直接アクセスするには、DbSet が必要だと考えています。ただし、信じるのではなく、知る必要があるので、私の信念を確認または否定 (?) してください。これまでインターネットや文献で読んだことについて言えば、いくつかのクラスでの DbSet の使用は効果的なコーディングを強調していますが、何が可能で何が不可能かは強調していません。

4

1 に答える 1

2

次のコードが存在すると仮定します。

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Configurations.Add(new TopClassMap());
    modelBuilder.Configurations.Add(new ExampleAMap());
    modelBuilder.Configurations.Add(new ExampleBMap());
    modelBuilder.Configurations.Add(new ExampleCMap());
    // ....
}

次を使用してそれぞれにアクセスできます。

ExampleContext context = new ExampleContext();
var a = context.Set<TopClass>();
var b = context.Set<ExampleA>();
var c = context.Set<ExampleB>();
// etc

DbSet特定の (または実際には任意の) を宣言する必要はありません

于 2013-03-08T11:54:36.530 に答える