2012-11-29 11 views
33

DbSetDbContextを混在させたコードを見ました。私はEntity Frameworkで強くない。私は彼らが違うものだと思った。DbSetとDbContextについて

誰かから少し説明をいただけますか?

public class testContext : DbContext 
{ 
    public testContext(); 

    public string IPAddress { get; set; } 
    public DbSet<WSettings> Settings { get; set; } 
    public string UserName { get; set; } 

    public override int SaveChanges(); 
} 

答えて

54

DbSetは、データベース内のテーブルまたはビューに対応し、一方、DbContextは、データベース(またはデータベース内のテーブルおよびビューの集合)に対応します。それで、あなたは両方の組み合わせを得ることが理にかなっています!

DbContextオブジェクトを使用してテーブルとビュー(DbSetで表される)にアクセスし、DbSetを使用してテーブルデータへのアクセス、作成、更新、削除、変更を行います。

データベースに10個のテーブルがあり、アプリケーションが5個(テーブル1〜テーブル5と呼ぶことにします)の場合は、MyAppContextクラスが定義されているMyAppContextオブジェクトを使用してアクセスしてください。

public class MyAppContext : DbContext 
{ 
    public MyAppContext() : ; 

    public DbSet<Table1> Table1 { get; set; } 
    public DbSet<Table2> Table2 { get; set; } 
    public DbSet<Table3> Table3 { get; set; } 
    public DbSet<Table4> Table4 { get; set; } 
    public DbSet<Table5> Table5 { get; set; } 
} 

例えば、識別子Table1は、定義されたコンテキストタイプのタイプの名前とプロパティの名前の両方として使用されます。上記の内容は非常に典型的なものです。テーブルスキーマに対応するクラスの例を以下に示します:

public class Table1 
{ 
    public int Id {get; set;} 
    public string AStringField {get; set;} 
    //etc. 
} 

は、詳細についてはこちらをご覧:一般http://entityframeworktutorial.net/

+0

、私はDbSet' 'の型パラメータを表現することが通例であると考えています単数形で、プロパティ名は複数形式で入力します。次に例を示します。 'public DbSet Customers {get;セット; } ' – DavidRR

15

DbContextは、一般にデータベース接続とテーブルのセットを表します。テーブルを表すのにDbSetが使用されます。

コードサンプルが予想されたパターンに適合しません。まず、不完全です。また、本当に属していないプロパティもあります。

このパターンはより典型的である:

直感的
class User 
{ 
    public string IPAddress { get; set; } 
    public ICollection<Settings> Settings { get; set; } 
    public string UserName { get; set; } 
} 

class MyContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Settings> Settings { get; set; } 
} 
関連する問題