2010-11-24 22 views
37

Creé una nueva aplicación Entity Frameworks Code First y DbSet (People) devuelve null.¿Por qué mi DbContext DbSet es nulo?

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

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

web.config: cadena de conexión

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

Ahora cuando llamo

Repository _repo = new Repository() 
_repo.People; 

_repo.People será nulo

lo que me falta?

  • Microsoft.Data.Entity.Ctp.dll se hace referencia
  • He tratado con y sin un inicializador base de datos.

Respuesta

54

Eso es porque define un campo de DbSet<Person> la clase repositorio en lugar de una propiedad . Una vez que agrega una propiedad o la cambia para que sea una propiedad automática, People comenzará a darle valores en lugar de nulo. Entonces todo lo que tiene que hacer es cambiar su clase de repositorio a:

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

WOW! ¡Me siento estupido! No puedo creer que no lo haya visto después de mirarlo durante horas. ¡Gracias! –

+0

De nada y sin preocupaciones, ya que las propiedades automáticas se parecen realmente a los campos, es por eso que siempre utilizo el atajo VS * prop * para crearlas :) –

+0

Acabo de cometer el mismo error. Mirado a la fecha por dos horas ayer y luego hizo clic ... Lo peor es que se obtiene un error sobre el parámetro: source es nulo, que es una pista falsa. – Jim

41

Acabo de tener el mismo problema. El problema fue que establecí estas propiedades como 'internas' mientras que deben haber sido 'públicas'. En caso de que alguien todavía esté buscando :)

+3

me has salvado la cordura !!!! – badMonkey

+0

¡resolvió mi problema también! –

+5

¿Alguien sabe por qué puede configurarlos para internos? –

1

Acabo de tener el mismo problema. El problema fue que establecí estas propiedades como 'internas' mientras que deben haber sido 'públicas'. Por si alguien todavía está buscando :)

supongo, estas propiedades pueden ser internos/pública también, si se utilizan de esta manera:

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

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