为什么我的DbContext DbSet为null?

问题描述:

我创建了一个新的Entity Frameworks Code 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是 引用
  • 我曾与和 尝试没有数据库的初始化。

那是因为你对库类而不是一个财产定义场的DbSet<Person>。一旦您添加一个属性或将其更改为自动属性,People将开始为您提供值而不是null。因此,您需要做的就是将您的存储库类更改为:

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

WOW!我觉得我好笨!我不敢相信在看了几个小时后我没有看到它。谢谢! – 2010-11-25 16:55:33

+0

不用担心,因为自动属性看起来与字段完全相同,这就是为什么我总是使用VS快捷键*道具*创建它们:) – 2010-11-25 17:10:11

我刚刚遇到同样的问题。问题在于,我确实将这些属性设置为“内部”,而它们必须是“公开”的。以防万一有人仍在搜索:)

我刚刚有同样的问题。问题在于,我确实将这些属性设置为“内部”,而它们必须是“公开”的。万一有人仍在寻找:)

我想,这些属性可以是内部/公众也一样,如果你使用它们像这样:

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

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