【发布时间】:2014-12-23 23:25:27
【问题描述】:
我有以下两个课程:
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 和映射。
现在假设我创建了一个 Reward 实体并像这样插入它:
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.Campaign 属性为空。似乎 EF 将插入的实体保存在内存中,然后当我执行 .SingleOrDefault(a => a.Id == reward.Id) 时,它只是返回内存中的实体,而不是新的代理。这可能是件好事。
所以问题是:如何在插入后访问或加载导航属性,或者获取一个新的代理,该代理也具有导航属性作为代理。
我可能以错误的方式插入?
【问题讨论】:
-
你的映射是什么样子的?
标签: c# entity-framework entity-framework-6