2011-12-11 75 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