我的模型类是:
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>
为现有用户创建新轮询的正确方法是什么?
答案 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; }
}
如果您的Poll
表User_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; }
}