60

I created a new Entity Frameworks Code First app and the DbSet (People) is returning null.

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

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

web.config: connection string

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

Now when I call

Repository _repo = new Repository()
_repo.People;

_repo.People will be null

What I am missing?

  • Microsoft.Data.Entity.Ctp.dll is referenced
  • I have tried with and without a database initializer.
Jamey McElveen
  • 18,135
  • 25
  • 89
  • 129

3 Answers3

93

That's because you define a field of DbSet<Person> on Repository class instead of a property. Once you add a property or change it to be a automatic property,People will start to give you values instead of null. So all you need to do is to change your Repository class to:

public class Repository : DbContext
{
    public DbSet<Person> People { get; set; }
}
Richard Ev
  • 52,939
  • 59
  • 191
  • 278
Morteza Manavi
  • 33,026
  • 6
  • 100
  • 83
51

I just had the same issue. The problem was that I did set these properties as 'internal' while they must have been 'public'. Just in case someone is still searching :)

Martynas
  • 1,064
  • 10
  • 21
  • 5
    anyone know why you can set them to internal at all? – Guy Lowe May 30 '14 at 00:10
  • 1
    @GuyLowe Because a db context is just another class. C# analysers haven't always been clever enough to flag these things as warnings. Now I'm wondering whether the same issue exists in .NET Core/EF Core. – Alternatex Jan 18 '22 at 14:34
5

I just had the same issue. The problem was that I did set these properties as 'internal' while they must have been 'public'. Just in case someone is still searching :)

I guess, these properties can be internal/public too, if you use them like this:

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

    public Repository()
    {
        //your code here...
        People = Set<Person>();
    }
}
denisv
  • 319
  • 3
  • 11