我的Db存在问题,我现在才知道,当我开始在网络api工作时。
我的 USER 实体:
public class User { get; set; }
{
public int UserId { get; set; }
public string Name { get; set; }
}
这是 ACTIVITY
public class Activity
{
public int ActivityId { get; set; }
public User User { get; set; }
}
我添加了一项活动并签入了SSMS。一切似乎都很好,有一个名为UserId的字段存储id。我的问题是当我尝试从活动获取用户时,因为我不断获取空对象。我没有在 DbContext 中设置任何特殊内容。
这是我尝试从Activity对象中获取用户的地方:
public ActionResult ActivityAuthor(int activityId)
{
Activity activityItem = unitOfWork.Activity.Get(activityId);
return Json(unitOfWork.User.Get(activityItem.User.UserId));
}
答案 0 :(得分:1)
我的通灵调试功能告诉我,如果没有Activity
用户
Include
表
using System.Data.Entity;
...
var activities = context.Activities
.Include(x => x.User)
.ToList();
或者,如果您选择Include
的属性作为查询的一部分,则不需要User
var vms = context.Activities
.Select(x => new ActivityVM() {UserName = x.User.Name})
.ToList();
答案 1 :(得分:1)
Activity类的User属性应标记为virtual。它使实体框架能够围绕属性创建代理并更有效地加载它。
在代码中的某处,您应该使用类似的加载方法:
using (var context = new MyDbContext())
{
var activity = context.Activities
.Where(a => a.ActivityId == id)
.FirstOrDefault<Activity>();
context.Entry(activity).Reference(a => a.User).Load(); // loads User
}
这应该加载User对象,你的代码中不会为null。
查看此链接以获取更多信息msdn