web-dev-qa-db-fra.com

À propos de DbSet et DbContext

J'ai vu un morceau de code qui mélange DbSet et DbContext ensemble. Je ne suis pas fort sur Entity Framework. Je pensais que ce sont des choses différentes.

Quelqu'un peut-il me donner une petite explication?

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

Intuitivement, un DbContext correspond à votre base de données (ou une collection de tables et de vues dans votre base de données) tandis qu'un DbSet correspond à une table ou une vue dans votre base de données. Il est donc parfaitement logique que vous obteniez une combinaison des deux!

Vous utiliserez un objet DbContext pour accéder à vos tables et vues (qui seront représentées par DbSet) et vous utiliserez vos DbSet pour accéder, créer, mettre à jour, supprimer et modifier vos données de table.

Si vous avez 10 tables dans votre base de données et que votre application fonctionne avec 5 d'entre elles (appelons-les Table1 - Tableau 5), il serait logique d'y accéder en utilisant un objet MyAppContext où la classe MyAppContext est définie ainsi:

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; }
}

Notez que, par exemple, l'identifiant Table1 est utilisé à la fois comme nom d'un type et comme nom d'une propriété dans le type de contexte défini. Ce que vous voyez ci-dessus est assez typique. Un exemple de classe qui correspond à un schéma de table est donné ci-dessous:

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

Jetez un oeil ici pour plus d'informations: http://entityframeworktutorial.net/

70
Miltos Kokkonidis

DbContext représente généralement une connexion à une base de données et un ensemble de tables. DbSet est utilisé pour représenter une table.

Votre exemple de code ne correspond pas au modèle attendu. Premièrement, il est incomplet. En outre, il existe des propriétés qui n'appartiennent vraiment pas.

Ce modèle est plus typique:

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; }
}
19
Daniel A. White