我有以下两个班级:
public class Reward
{
public int Id { get; set; }
public int CampaignId { get; set;
public virtual Campaign Campaign { get; set; }
}
public class Campaign
{
public int Id { get; set; }
public virtual ICollection<Reward> Rewards { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我就拥有了所有显而易见的必要内容,比如DbContext和映射.
现在让我们说我创建一个奖励实体并像这样插入:
var reward = new Reward { CampaignId = 1 };
context.Set<Reward>().Add(reward);
context.SaveChanges();
reward = context.Set<Reward>().SingleOrDefault(a => a.Id == reward.Id);
//reward.Campaign is null
Run Code Online (Sandbox Code Playgroud)
我显然有一个Id 1的广告系列,所以FK约束很开心.在此插入之后,我的奖励实体具有新的Identity Id集.现在问题是奖励仍然只是我创建的奖励实体.有了这个,reward.Campaign属性为null.似乎EF将插入的实体保留在内存中,然后当我执行.SingleOrDefault(a => a.Id == reward.Id)时,它只返回内存中的实体,而不是新的代理.这可能是一件好事.
所以问题是:如何在插入后访问或加载导航属性,或获取具有导航属性作为代理的新代理.
我可能以错误的方式插入?