【问题标题】:Why is my DbContext DbSet null?为什么我的 DbContext DbSet 为空?
【发布时间】:2011-05-15 07:44:17
【问题描述】:

我创建了一个新的 Entity Frameworks Code First 应用,而 DbSet (People) 返回 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 是 引用
  • 我已经尝试过 没有数据库初始化程序。

【问题讨论】:

    标签: entity-framework code-first ef-code-first


    【解决方案1】:

    这是因为您在 Repository 类而不是 property 上定义了 DbSet&lt;Person&gt;字段。添加属性或将其更改为自动属性后,People 将开始为您提供值而不是 null。因此,您需要做的就是将您的 Repository 类更改为:

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

    【讨论】:

    • 哇!我觉得我好笨!我不敢相信在盯着它看了几个小时后我没有看到这一点。谢谢!
    • 我也犯了同样的错误。昨天盯着 da*n 的东西看了两个小时,然后点击了...
    • 我现在感觉自己像个白痴。谢谢,你的救命稻草!
    • 如果您尝试使用{ get; private set; },它也可能为空。 EF 不喜欢那样。
    • setter 也不应该受到保护。它应该是公开的:{ get; set; }
    【解决方案2】:

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

    【讨论】:

    • 有人知道你为什么可以将它们设置为内部吗?
    【解决方案3】:

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

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

    public class Repository : DbContext
    {
        internal DbSet<Person> People { get; set; }
    
        public Repository()
        {
            //your code here...
            People = Set<Person>();
        }
    }
    

    【讨论】:

    • 这是一种两全其美的非常聪明的方法。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2018-06-26
    相关资源
    最近更新 更多