web-dev-qa-db-fra.com

Pourquoi mon DbContext DbSet est-il nul?

J'ai créé une nouvelle application Entity Frameworks Code First et le DbSet (People) renvoie null.

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Repository : DbContext
{
    public DbSet<Person> People;
}

web.config: chaîne de connexion

<connectionStrings>
  <add name="Repository"
       connectionString="Data Source=|DataDirectory|Repository.sdf"
       providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>

Maintenant, quand j'appelle

Repository _repo = new Repository()
_repo.People;

_repo.People sera nul

Qu'est-ce qui me manque?

  • Microsoft.Data.Entity.Ctp.dll est référencé
  • J'ai essayé avec et sans initialiseur de base de données.
44
Jamey McElveen

C'est parce que vous définissez un champ de DbSet<Person> sur la classe Repository au lieu d'une propriété. Une fois que vous avez ajouté ou modifié une propriété pour en faire une propriété automatique, People commencera à vous donner des valeurs au lieu de null. Il vous suffit donc de changer votre classe Repository en:

public class Repository : DbContext
{
    public DbSet<Person> People { get; set; }
}
71
Morteza Manavi

Je viens d'avoir le même problème. Le problème était que j'avais défini ces propriétés comme "internes" alors qu'elles devaient être "publiques". Juste au cas où quelqu'un chercherait encore :)

45
Martynas

Je viens d'avoir le même problème. Le problème était que j'avais défini ces propriétés comme "internes" alors qu'elles devaient être "publiques". Juste au cas où quelqu'un chercherait encore :)

Je suppose que ces propriétés peuvent également être internes/publiques, si vous les utilisez comme ceci:

public class Repository : DbContext
{
    internal DbSet<Person> People { get; set; }

    public Repository()
    {
        //your code here...
        People = Set<Person>();
    }
}
4
denisv