c# DbSet - Internal object cannot be got

2019-02-09 03:20发布

问题:

I need to switch an entity to internal. So I create it. No build/runtime error. But when I want to use the DbSet object I can't because the object seems not initialized !

My ContextEntities:

public partial class Entities
{
   internal DbSet<Employee> EmployeeSet { get; set; }
}

I use like this:

Entities context = new Entities();
List<Employee> employees = context.EmployeeSet.ToList();

But "EmployeeSet" is null. I think it's because it is not instantiated in get. It works if I use public like this:

public partial class Entities
{
   public DbSet<Employee> EmployeeSet { get; set; }
}

Questions: Can it work if a DbSet is marked internal? If so how? Why does that break it? (thanks Scott Stafford)

回答1:

It will not be automatically instantiated if it is not set to public. You can manually instantiate it using Set<TEntity>() method.

public partial class Entities
{
   internal DbSet<Employee> EmployeeSet { get; set; }

   public Entities()
   {
       EmployeeSet = Set<Employee>();
   }
}


回答2:

I just had the same problem and was able to fix it by only setting the getter as internal.

public partial class Entities
{
   public DbSet<Employee> EmployeeSet { internal get; set; }
}