3 回答

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

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

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