小编Jus*_*ger的帖子

插入后获取实体导航属性

我有以下两个班级:

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)时,它只返回内存中的实体,而不是新的代理.这可能是一件好事.

所以问题是:如何在插入后访问或加载导航属性,或获取具有导航属性作为代理的新代理.

我可能以错误的方式插入?

c# entity-framework entity-framework-6

41
推荐指数
2
解决办法
1万
查看次数

标签 统计

c# ×1

entity-framework ×1

entity-framework-6 ×1