2013-05-02 263 views
2

我有2個班實體框架外鍵

public class Person 
{   
    public int Id { get; set; }   
    public string FirstName { get; set; }   
    public string LastName { get; set; }   
    public string Email { get; set; } 
} 

public class PersonWebsite 
{ 
    public int Id { get; set; } 
    public string Website { get; set; } 
    public int PersonId{ get; set; } 
} 

我見過這樣的東西被前

public class Person 
{ 
    public int Id { get; set; }   
    public string FirstName { get; set; }   
    public string LastName { get; set; }   
    public string Email { get; set; } 

    public ICollection<PersonWebsite> PersonWebsites{ get; set; } 

} 

做我怎麼可能去執行代碼,當Person初始化時,PersonWebsites List將自動初始化並獲取所有PersonWebsite對象cts與調用它的類具有相同的PersonId。

回答

1

延遲加載:

您可以PersonWebsites虛擬財產:

public virtual ICollection<PersonWebsite> PersonWebsites{ get; set; }

實體框架會從數據庫,只要它需要加載它。 該方法也需要你有延遲加載啓用默認情況下爲:

DbContext.ContextOptions.LazyLoadingEnabled = true;

預先加載:

可以使用包括強制實體框架對第一查詢負載PersonWebsites

DbSet.Include(p => p.PersonWebsites);

+0

當我加載使用uow.People.GetById(ID)的人;網站爲空?我必須向數據庫表添加任何東西嗎? – 2013-05-02 20:17:18

+0

你有沒有設置「Person」和「PersonWebsites」關係?如果不是,安德魯的答案設置了。然後在你的DbContext中,例如你可以使用'People.Include(p => p.PersonWebsites).Find(id)' – 2013-05-03 01:44:37

1

你也可以改變你的PersonWebsite L級IKE此,爲了導航到從PersonWebsite對象的人(使用延遲加載):

public class PersonWebsite 
{ 
    public int Id { get; set; } 
    public string Website { get; set; } 
    [ForeignKey("Person")] 
    public int PersonId{ get; set; } 
    public virtual Person Person {get;set;} 
}