我将这个实体类与 Entity Framework 5 Code First 一起使用:
public class Survey
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string SurveyName { get; set; }
[Required]
public int ClientID { get; set; }
[ForeignKey("ClientID")]
public virtual Client Client { get; set; }
}
在我的控制器的 Create 方法中,我这样做:
Survey entity = new Survey()
{
SurveyName = "Test Name",
ClientID = 4
};
db.Surveys.Add(entity);
db.SaveChanges();
Client c1 = entity.Client; //Why is this null?
Client c2 = db.Clients.Find(entity.ClientID); //But this isn't?
string s2 = c2.ClientName;
string s1 = c1.ClientName; //null reference thrown here
在 SaveChanges 之后,客户端导航属性保持为空。我希望调用从数据库加载客户端,因为存在外键。为什么不这样做?
编辑
这里的代码来自我的控制器依赖于DbContext
. 在我完成这项工作后不久,我重新分解了代码以使用存储库和一个工作单元。Create
这一举动的部分原因是当我想使用时感觉使用它是错误的new
。然后发生的事情是我遇到了如何确保在使用存储库模式时创建代理的问题。