2011-12-11 72 views
0

我的模型類:實體框架,兩個表之間的關係

public class User 
{ 
    public User() 
    { 
     Polls = new List<Poll>(); 
    } 
    public int Id { get; set; } 
    public String FirstName { get; set; } 
    public String LastName { get; set; } 

    ICollection<Poll> Polls { get; set; } 

} 

public class Poll 
{ 
    public int Id { get; set; } 
    public int PositiveCount { get; set; } 
    public int NegativeCount { get; set; } 
    public String Description { get; set; } 
    public User User { get; set; } 

} 

public class PollsContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Poll> Polls { get; set; } 
} 

EF創建了民意調查表的表user_id列。 在輪詢的創建視圖中,我想爲新的輪詢屬性指定UserId,但intellisense顯示沒有對model.UserId的訪問,有一個model.User.Id,它不允許我創建輪詢對於現有用戶,而是使用新ID創建新用戶,並且不創建關聯。

<div class="editor-label"> 
     @Html.LabelFor(model => model.User.Id) 
</div> 
<div class="editor-field"> 
     @Html.EditorFor(model => model.User.Id) 
     @Html.ValidationMessageFor(model => model.User.Id) 
</div> 

那麼爲現有用戶創建新民意調查的正確方法是什麼?

回答

0
public class Poll 
{ 
    public int Id { get; set; } 
    public int PositiveCount { get; set; } 
    public int NegativeCount { get; set; } 
    public String Description { get; set; } 
    public int UserId { get; set; } 
    public User User { get; set; } 
} 
0

我覺得你Poll類應該是這樣的:

public class Poll 
{ 
    public int Id { get; set; } 
    public int PositiveCount { get; set; } 
    public int NegativeCount { get; set; } 
    public String Description { get; set; } 
    public int User_Id { get; set; } 
    public User User { get; set; } 

} 

如果你在你的PollUser_Id一列,那麼你的模型應該也有此列。然後,您只需將User_Id分配給Poll,並且實體框架將負責正確鏈接到正確的User對象。

此外,考慮使您的關聯屬性(Poll.User和User.Polls)爲虛擬以便使用實體框架的延遲加載機制。 請參閱this

+0

我會嘗試您的建議。我只是感到困惑,因爲User_Id列實際上存在,模型不能訪問它。你知道爲什麼嗎? – mishap

+0

嘗試了你的建議,現在EF創建了User_Id列而沒有任何關聯,而User_Id1作爲FK到Users表。 – mishap

+0

您使用的是什麼版本的EF?先寫代碼或者用edmx映射文件「普通」一個(我不知道那個名字)? – sTodorov