2012-12-04 124 views
5

在下面的函數中,在context.SaveChanges()之後,實體PropertyType始終爲空。我只是從使用ObjectContext轉換爲DBContext(首先是數據庫),並在更改之前,它工作正常,現在它不。有什麼我失蹤?在SaveChanges實體框架後延遲加載不工作

我檢查PropertyTypeID,它被正確寫入並存在於數據庫中。所有關係都在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 += "<br /><br /><strong>" + DateTime.Now + "</strong>: Transfer initialized for property type \"" + transfer_detail.PropertyType.DisplayName + "\"."; 
     } 

     return transfer_detail; 
    } 

感謝。

編輯

我發現,如果我添加的SaveChanges()後,這行代碼,它的工作原理。但是,這並不理想,我怎麼能使它默認加載實體?

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

再次感謝。

回答

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; 
} 
+0

這解決了我的問題。但是,這樣做需要在實例化上下文之後創建實體。因此,如我的編輯中所示,手動加載引用會更好。謝謝您的幫助! – Ricketts

相關問題