2014-03-06 44 views
0

我有個小問題與EF,我不知道怎麼解釋,所以我只舉一個例子:虛擬ICollection的延遲加載實體框架與模型構造器

這裏是我的對象:

public class User 
{ 
    public int UserId { get; set; } 

    public virtual ICollection<Tag> Tags { get; set; } 

    // Need model builder example for this one 
    public virtual ICollection<Event> Events { get; set; } 
} 

public class Tag 
{ 
    public int TagId { get; set; } 
    public int UserId { get; set; } 

    public virtual User User { get; set; } 
    public virtual ICollection<Event> Events { get; set; } 
} 

public class Event 
{ 
    public int EventId { get; set; } 
    public int TagId { get; set; } 
    public virtual Tag Tag { get; set; } 
} 

是否有可能通過'Event.Tag.User'延遲加載/映射虛擬ICollection'User.Events'而不進行任何數據庫表更改?

2014年3月7日

下面是一個例子SLQ子句,其中用戶ID與用戶1:

SELECT Events.EventId 
FROM Events 
INNER JOIN Tags ON Tags.TagId = Events.TagId 
INNER JOIN Users ON Users.UserId = Tags.UserId 
WHERE Users.UserId = 1 

我不知道,但我正在尋找,也許是這樣的:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<User>().HasMany(user => user.Events).WithMany(... 
} 
+0

當您嘗試訪問它時會發生什麼?你能舉一個你如何做這個例子嗎? – elolos

+0

好吧,當添加到用戶類: 公共虛擬ICollection 事件{get;組; } EF將'User_UserId'字段添加到'Events'表中,然後修改數據庫表。 : -/ – soreal

+0

好吧,如果我理解正確,你想添加Events屬性給用戶,但不更改Events表? – elolos

回答

0

是的。只要你的上下文沒有被處置,你訪問的任何虛擬財產將會再次訪問數據庫。如果您遇到特定問題,可能會發布錯誤消息。我現在看到你的代碼沒有錯。

+0

代碼正常,但「EF將」User_UserId「字段添加到」事件「表中,然後修改數據庫表。」 – soreal

相關問題