实体框架,两个表之间的关系

时间:2011-12-11 20:47:21

标签: asp.net-mvc asp.net-mvc-3 entity-framework razor

我的模型类是:

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为Polls表创建了一个表User_Id列。 在Poll的Create视图中,我想为新的poll也指定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>

为现有用户创建新轮询的正确方法是什么?

2 个答案:

答案 0 :(得分: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)设置为虚拟,以便使用Entity Framework的延迟加载机制。 见this

答案 1 :(得分: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; }
}