2010-11-24 2 views
37

Я создал новое приложение Entity Frameworks First, а DbSet (People) возвращает null.Почему мой DbContext DbSet null?

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

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

web.config: Строка подключения

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

Теперь, когда я звоню

Repository _repo = new Repository() 
_repo.People; 

_repo.People будет нулевым

Что мне не хватает?

  • Microsoft.Data.Entity.Ctp.dll является ссылкой
  • Я попытался с и без инициализатора баз данных.

ответ

54

Это потому, что вы определяете полю из DbSet<Person> на Repository класса вместо собственности. Когда вы добавите свойство или измените его как автоматическое свойство, People начнет давать вам значения вместо нуля. Итак, все, что вам нужно сделать, это изменить свой класс хранилища на:

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

WOW! Я чувствую себя глупо! Я не могу поверить, что не видел этого, смотря на него часами. Спасибо! – 2010-11-25 16:55:33

+0

Добро пожаловать и не беспокойтесь, так как автоматические свойства выглядят действительно так же, как и поля, поэтому я всегда использую VS shortcut * prop * для их создания :) – 2010-11-25 17:10:11

41

У меня была такая же проблема. Проблема заключалась в том, что я установил эти свойства как «внутренние», в то время как они, должно быть, были «общедоступными». На всякий случай кто-то все еще ищет :)

1

У меня была такая же проблема. Проблема заключалась в том, что я установил эти свойства как «внутренние», в то время как они, должно быть, были «общедоступными». Только в случае, если кто-то все еще ищет :)

Я думаю, эти свойства могут быть внутренними/публика тоже, если вы используете их, как это:

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

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