我在ViewModel中拥有两个实体的属性。这两个实体彼此相关,例如,用户和帖子。每个用户可以有多个帖子,许多帖子可以属于一个用户(一对多)。
我的ViewModel的目标是允许在同一表单上添加User和Post。所以我的ViewModel看起来像这样:
public class CreateVM
{
[Required, MaxLength(50)]
public string Username { get; set; }
[Required, MaxLength(500), MinLength(50)]
public string PostBody { get; set; }
// etc with some other related properties
}
在我的控制器上创建方法我有这样的事情:
[HttpPost]
public ActionResult Create(CreateVM vm)
{
if (ModelState.IsValid)
{
User u = new User()
{
Username = vm.Username,
// etc populate properties
};
Post p = new Post()
{
Body = vm.PostBody,
// etc populating properties
};
p.User = u; // Assigning the new user to the post.
XContext.Posts.Add(p);
XContext.SaveChanges();
}
}
当我通过调试器浏览它时,一切看起来都很好,但是当我尝试查看帖子时,其用户关系为空!
我也试过
u.Posts.Add(p);
更新
我的Post类代码如下:
public class Post
{
[Key]
public int Id { get; set; }
[Required, MaxLength(500)]
public string Body { get; set; }
public int Likes { get; set; }
[Required]
public bool isApproved { get; set; }
[Required]
public DateTime CreatedOn { get; set; }
[Required]
public User User { get; set; }
}
但那也行不通。我究竟做错了什么 ?我会非常感谢任何帮助。
谢谢。
答案 0 :(得分:1)
问题是EF无法延迟加载User
属性,因为您尚未加载virtual
。
public class Post
{
[Key]
public int Id { get; set; }
[Required, MaxLength(500)]
public string Body { get; set; }
public int Likes { get; set; }
[Required]
public bool isApproved { get; set; }
[Required]
public DateTime CreatedOn { get; set; }
[Required]
public virtual User User { get; set; }
}
如果您事先知道要访问帖子的User
属性,则应该急切加载与该帖子相关的User
。
context.Posts.Include("User").Where(/* condition*/);