亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Entity Framework 4中默認禁用延遲加載

在Entity Framework 4中默認禁用延遲加載

似乎在EF4中默認啟用了延遲加載。至少在我的項目中,我可以看到dataContext.ContextOptions.LazyLoadingEnabled默認情況下為true。我不想延遲加載,也不想寫:dataContext.ContextOptions.LazyLoadingEnabled = false;每次獲得新的環境時。那么有沒有辦法默認關閉整個項目?
查看完整描述

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,然后單擊“屬性”。

http://img1.sycdn.imooc.com//5da95c330001d76c03490397.jpg

EDMX文件的此修改將自動在生成器中使用禁用的延遲加載選項生成上下文類,如上所示。從數據庫更新模型時,EDMX文件修改本身不會被覆蓋。


查看完整回答
反對 回復 2019-10-18
?
慕姐4208626

TA貢獻1852條經驗 獲得超7個贊

我寫了一個快速示例,展示了新的延遲加載功能如何與EF Code First一起使用。在“代碼優先”模型中實現所需的內容只需在DbContext的構造函數中添加一行即可,如下所示:


public BlogContext()

{

    this.Configuration.LazyLoadingEnabled = false;

}


查看完整回答
反對 回復 2019-10-18
?
慕尼黑的夜晚無繁華

TA貢獻1864條經驗 獲得超6個贊

如果您使用的是EF4 Code First,是嗎?因此,在上下文的初始化中,將覆蓋“ OnModelCreated”。


在這種方法中,我只需調用并設置屬性即可解決所有問題。


protected override void OnModelCreating(DbModelBuilder modelBuilder) {

     base.Configuration.LazyLoadingEnabled = false;

}

我的模型現在更可口了。延遲加載很棒...但是當您不想要它時則不然。當您開始使用循環引用時,這很荒謬。


查看完整回答
反對 回復 2019-10-18
  • 3 回答
  • 0 關注
  • 756 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號