使用未加载的延迟加载的虚拟属性

时间:2016-04-05 09:12:46

标签: c# entity-framework lazy-loading eager-loading navigation-properties

我正在使用EF Edmx,延迟加载。 我得到一个项目,其中有一个虚拟列表作为其他对象的导航属性。

前:

public partial class CalculationInstance{
     public virtual ICollection<ServiceOffer> ServiceOffers { get; set; }
}

我有一个获取CalculationInstance的方法,其中我不包含ServiceOffers。

稍后在代码中我想要归因于该对象实例的ServiceOffers:

var cInst = GetCalculationInstance(id);
cInst.ServiceOffers = GetListOfServiceOffers();

稍后,当我尝试使用ServiceOffers时,它会抛出Context对象的异常处理。因为它试图从数据库中获取它们,而不是仅仅使用我刚刚归因的服务。

  

ObjectContext实例已被释放,无法再使用   对于需要连接的操作。

我的目标是用我自己的列表而不是数据库填充对象,有没有办法做到这一点?

编辑: 供参考:

public CalculationInstance GetCalculationInstance(Guid id) {
        PortugalInternalCalculatorDb ctx = null;
        try {
            ctx = _ciContextFactory.Create();
            return ctx.CalculationInstances
                .Include(l => l.CompatibilityGroup)
                .Include(l => l.CalculationAnswers)
                .SingleOrDefault(l => l.Id == id);
        } finally {
            if (ctx != null)
                _ciContextFactory.Release(ctx);
        }
    }

public List<ServiceOffer> GetServiceOffers(Guid calcInstanceId, string partner = null) {
            PortugalInternalCalculatorDb ctx = null;
            try {
                ctx = _ciContextFactory.Create();
                return
                    ctx.ServiceOffers
                        .Include(_ => _.ServiceOfferFeatures)
                        .Include(_ => _.Provider)
                        .Where(_ => _.CalculationInstanceId == calcInstanceId
                        && (partner == null || _.Provider.CommunicatorPrefix.ToLower().Equals(partner)))
                        .ToList();
            } finally {
                if (ctx != null)
                    _ciContextFactory.Release(ctx);
            }
        }

0 个答案:

没有答案