2010-11-24 98 views
37

我創建了一個新的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是 引用
  • 我曾與和 嘗試沒有數據庫的初始化。

回答

54

那是因爲你對庫類而不是一個財產定義場的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

41

我剛剛遇到同樣的問題。問題在於,我確實將這些屬性設置爲「內部」,而它們必須是「公開」的。以防萬一有人仍在搜索:)

1

我剛剛有同樣的問題。問題在於,我確實將這些屬性設置爲「內部」,而它們必須是「公開」的。萬一有人仍在尋找:)

我想,這些屬性可以是內部/公衆也一樣,如果你使用它們像這樣:

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

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