3 回答

TA貢獻1828條經驗 獲得超3個贊
以下答案涉及“ 數據庫優先”或“ 模型優先”工作流(當提出問題時,只有兩個工作流可用于Entity Framework(版本<= 4.0))。如果您使用的是Code-First工作流程(自EF版本> = 4.1起可用),請向史密斯(ssmith)回答此問題,以獲取正確的解決方案。
edmx文件在<ConceptualModel>和<EntityContainer>定義中具有延遲加載的屬性,您可以在其中將延遲加載通常設置為false:
<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">
這將在ObjectContext構造函數中創建以下設置:
public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
{
this.ContextOptions.LazyLoadingEnabled = false;
OnContextCreated();
}
我的示例并不意味著應該手動編輯生成的ObjectContext(或DbContext在新的EF版本中)(如ctorx指出的那樣,數據庫中的每個模型更新都將其覆蓋),而是EDMX文件部分中的EntityContainer元素edmx:ConceptualModels應該通過添加annotation:LazyLoadingEnabled="false"屬性來進行編輯-在XML編輯器中手動創建,或者在設計器界面的屬性頁面上(也可以使用此選項)進行手動編輯,右鍵單擊EDMX,然后單擊“屬性”。
EDMX文件的此修改將自動在生成器中使用禁用的延遲加載選項生成上下文類,如上所示。從數據庫更新模型時,EDMX文件修改本身不會被覆蓋。

TA貢獻1852條經驗 獲得超7個贊
我寫了一個快速示例,展示了新的延遲加載功能如何與EF Code First一起使用。在“代碼優先”模型中實現所需的內容只需在DbContext的構造函數中添加一行即可,如下所示:
public BlogContext()
{
this.Configuration.LazyLoadingEnabled = false;
}

TA貢獻1864條經驗 獲得超6個贊
如果您使用的是EF4 Code First,是嗎?因此,在上下文的初始化中,將覆蓋“ OnModelCreated”。
在這種方法中,我只需調用并設置屬性即可解決所有問題。
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.Configuration.LazyLoadingEnabled = false;
}
我的模型現在更可口了。延遲加載很棒...但是當您不想要它時則不然。當您開始使用循環引用時,這很荒謬。
添加回答
舉報