为什么我的DbContext DbSet为null?

Jam*_*een 43 entity-framework code-first ef-code-first

我创建了一个新的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;
}
Run Code Online (Sandbox Code Playgroud)

web.config:连接字符串

<connectionStrings>
  <add name="Repository"
       connectionString="Data Source=|DataDirectory|Repository.sdf"
       providerName="System.Data.SqlServerCe.4.0"/>
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)

现在我打电话的时候

Repository _repo = new Repository()
_repo.People;
Run Code Online (Sandbox Code Playgroud)

_repo.People 将为null

我错过了什么?

  • 引用了Microsoft.Data.Entity.Ctp.dll
  • 我曾尝试使用和不使用数据库初始化程序.

Mor*_*avi 67

那是因为你定义一个字段DbSet<Person>在库类,而不是一个性质.添加属性或将其更改为自动属性后,People将开始为您提供值而不是null.所以你需要做的就是将你的Repository类更改为:

public class Repository : DbContext
{
    public DbSet<Person> People { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果你试图使用`{get; 私人集; }`.EF不喜欢这样. (6认同)
  • 哇!我觉得我好笨!我不敢相信在盯着它好几个小时后我没有看到它.谢谢! (3认同)
  • 我刚刚犯了同样的错误。昨天盯着那个 da*n 的东西看了两个小时然后点击了……最糟糕的是你得到一个关于参数的错误:源为空,这是一个红鲱鱼。 (3认同)
  • 我现在觉得自己像个白痴.谢谢,你救命! (2认同)
  • 也不应该保护二传手。它应该是公开的:`{ get; 放; }` (2认同)

Mar*_*nas 44

我刚才有同样的问题.问题是我确实将这些属性设置为"内部",而它们必须是"公共"的.以防有人还在搜索:)

  • 有谁知道为什么你可以将它们设置为内部? (5认同)

小智 5

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

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

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

    public Repository()
    {
        //your code here...
        People = Set<Person>();
    }
}
Run Code Online (Sandbox Code Playgroud)