2013-05-28 38 views
3

我已經創建了一個edmx,並在designer.cs文件中有3個構造函數。在每個構造我添加followiing行:如何禁用每個dbContext實例的延遲加載?

this.Configuration.LazyLoadingEnabled = false; 

然而,當我創建一個新的DbContext延遲加載啓用,因爲當我創建一個新的DbContext不使用任何這種構造函數。

哪個構造函數用於創建新的DBContext?

編輯:我沒有先使用代碼。我從SQL Server數據庫創建我的edmc。

謝謝。

回答

3

你可以去EDMX文件,屬性,並有一個屬性延遲加載。只是把它弄錯了。

問候,

==============編輯===============

你不擁有這個? enter image description here

==新的編輯== enter image description here

+0

我在edmx的屬性中沒有這個propery。我只編譯動作,複製結果文件夾,命名空間工具,自定義工具,文件名和路徑。 –

+2

@ÁlvaroGarcía您必須點擊設計師。你看到的只是'只是文件'的屬性,而不是設計器中當前活動對象的屬性。 – Maarten

+1

您必須打開edmx,然後按F4(對於屬性) – sexta13

1

我認爲在EDMX設計時畫布屬性上有一個屬性來禁用延遲加載。 的EDMX文件在ConceptualModel和EntityContainer相關定義延遲加載的屬性,你通常可以設置延遲加載爲false:

<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false"> 

裁判:Disable lazy loading by default in Entity Framework 4

+0

我這一行:但是註解給我一個錯誤:前綴是不是definied。 –

1

在EDMX設計屬性的屬性被稱爲LazyLoadingEnabled - 它默認爲true。

這在T4模板(MyModel.Context.tt)的用法如下:

public <#=Code.Escape(container)#>() 
    : base("name=<#=container.Name#>") 
{ 
<# 
    WriteLazyLoadingEnabled(container); 
#> 
} 

這將寫出下列如果禁用該屬性:

this.Configuration.LazyLoadingEnabled = false; 

如果FWR的屬性在EDMX設計器中是不可見的,您可以刪除條件代碼並對其進行硬編碼:

public <#=Code.Escape(container)#>() 
    : base("name=<#=container.Name#>") 
{ 
    this.Configuration.LazyLoadingEnabled = false; 
    // more setup here, e.g. this.Configuration.ProxyCreationEnabled = false;  
}