为什么我的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; }
}
答
我刚刚遇到同样的问题。问题在于,我确实将这些属性设置为“内部”,而它们必须是“公开”的。以防万一有人仍在搜索:)
答
我刚刚有同样的问题。问题在于,我确实将这些属性设置为“内部”,而它们必须是“公开”的。万一有人仍在寻找:)
我想,这些属性可以是内部/公众也一样,如果你使用它们像这样:
public class Repository : DbContext
{
internal DbSet<Person> People { get; set; }
public Repository()
{
//your code here...
People = Set<Person>();
}
}
WOW!我觉得我好笨!我不敢相信在看了几个小时后我没有看到它。谢谢! – 2010-11-25 16:55:33
不用担心,因为自动属性看起来与字段完全相同,这就是为什么我总是使用VS快捷键*道具*创建它们:) – 2010-11-25 17:10:11