48

混ざり合ったコードを見ましDbSetDbContext。私はEntityFrameworkに強いわけではありません。違うものだと思いました。

誰かが私に少し説明をしてもらえますか?

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();
}
4

2 に答える 2

88

直感的には、DbContextはデータベース(またはデータベース内のテーブルとビューのコレクション)に対応しますが、DbSetはデータベース内のテーブルまたはビューに対応します。したがって、両方の組み合わせを取得することは完全に理にかなっています!

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

データベースに10個のテーブルがあり、アプリケーションがそのうちの5個で動作する場合(これらをTable1-表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/

于 2012-11-29T14:25:19.620 に答える
24

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; }
}
于 2012-11-29T14:23:59.380 に答える