我有以下两个类:
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; }
}
我已经有了所有明显必要的东西,例如 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
显然我有一个id为1的广告系列,因此FK约束没问题。在此插入后,我的奖励实体已经设置了新的标识ID。现在的问题是,reward仍然只是我创建的Reward实体。而且这时候,reward.Campaign属性是null。EF似乎在内存中保留插入的实体,当我使用.SingleOrDefault(a => a.Id == reward.Id)时,它只是返回内存中的实体,而不是新的代理。这可能是一件好事。
所以问题是:如何在插入后访问或加载导航属性,或获取具有导航属性作为代理的新代理。
我是否可能是以错误的方式进行插入?