首页 文章

SaveChanges实体框架后延迟加载不起作用

提问于
浏览
5

在下面的函数中,在context.SaveChanges()之后,实体PropertyType始终为null . 我刚刚使用ObjectContext转换为DBContext(首先是数据库),在更改之前,它工作正常,现在却没有 . 有什么我想念的吗?

我检查PropertyTypeID并且它被正确写入并存在于db中 . 所有关系都在db和edmx文件中正确设置 . 生成的.tt文件将PropertyType对象显示为虚拟对象 . 这是EF 5 .

这是代码(实体属性的非重要分配已被删除):

private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID)
    {
        ListingTransferDetail transfer_detail = new ListingTransferDetail();
        transfer_detail.PropertyTypeID = PropertyTypeID;

        using (IDXEntities context = new IDXEntities())
        {
            context.ListingTransferDetails.Add(transfer_detail);
            context.SaveChanges();
            TransferProgress += "

<strong>" + DateTime.Now + "</strong>: Transfer initialized for property type \"" + transfer_detail.PropertyType.DisplayName + "\"."; } return transfer_detail; }

提前致谢 .

EDIT

我发现如果我在SaveChanges()之后添加这行代码,它就可以了 . 但是,这并不理想,我怎样才能使它默认加载实体?

context.Entry(transfer_detail).Reference(a => a.PropertyType).Load();

再次感谢 .

1 回答

  • 12

    您需要创建代理而不是使用 new 才能启用延迟加载:

    private ListingTransferDetail BeginListingTransferDetailReport(int PropertyTypeID)
    {
        using (IDXEntities context = new IDXEntities())
        {
            ListingTransferDetail transfer_detail =
                context.ListingTransferDetails.Create();
            transfer_detail.PropertyTypeID = PropertyTypeID;
    
            context.ListingTransferDetails.Add(transfer_detail);
            context.SaveChanges();
    
            //...
    
            // the following triggers lazy loading of PropertyType now
            var something = transfer_detail.PropertyType.SomeProperty;
        }
    
        return transfer_detail;
    }
    

相关问题