2016-09-19 301 views
6

我重寫OnModelCreating,並在方法有行base.OnModelCreating(modelBuilder);是base.OnModelCreating(modelBuilder)必要的嗎?

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
} 

看代碼樣本,並就如何實現這一手冊,我得到困惑,還判定是否我需要與否。有時它在那裏,有時不在。有時在方法開始時,其他時間結束。

我該怎麼處理它?

回答

3

按照documentation,如果你直接從DbContext類繼承,也沒關係:

該方法被調用時的推導的情境模型已被初始化,但該模型已被前鎖定並用於初始化上下文。 此方法的默認實現不會執行任何操作,但可以在派生類中重寫它,以便模型可以在鎖定之前進一步配置。

換句話說,通過定義既然是什麼都不做,呼籲base.OnModelCreating是沒有必要的,但在同一時間,如果所謂的不會傷害 - 這就是爲什麼有時它的存在,有時沒有。有時在方法開始時,其他時間結束。

+0

我明白了。儘管如此,爲什麼它在它什麼都不做時稱之爲?我的意思是,我得到的重寫給模型構建器,我們可以進一步配置。但爲什麼打電話給基地?換句話說,我們傳遞給modelBuilder會發生什麼。聽起來都是這樣......無用的:-) –

+0

這就是要點。當你有一個基本的'virtual'方法時,必須有一些文檔解釋當你覆蓋它的時候調用這個方法的需求,就像你需要調用它,如果你需要在開始時或者在結束。這裏的文檔聲明該方法什麼都不做,所以沒有要求 - 如果你願意,或者根本不能調用它,你可以在任何地方調用它。一旦你知道它根據定義**什麼也不做,你可能不會說它:) –

2

這裏說什麼... Pawel Kadluczka - MSFT

目前,它其實並不重要。 OnModelCreating和Seed 方法在其基類中都沒有任何實現(即 函數的主體爲空)。因此調用 基類基本上是沒有操作的。我不認爲有任何計劃 改變它(特別是種子的方法 - 我們怎麼會知道放什麼數據 在數據庫中)

一般保護方法可以在基地 類的一些執行情況。在這種情況下,這取決於開發人員是否從 這樣的類中決定他/她是否想要利用基類中方法中提供的功能或不使用 。如果 開發人員認爲他/她只想添加一些東西到基類中的方法所提供的功能中,他會將 稱爲此方法。否則,他/她不會調用 基類的方法,並且會在派生類的 方法中提供所有必需的功能。

參考:Link

+0

說一個人(不管是否是MSFT)真的沒有關係。唯一重要的是**官方文檔**(如果它是錯誤的,那麼這是一個必須報告和修復的錯誤 - 顯然這不是這種情況)。 –

+0

嗯..兩者在這裏是一樣的:D @IvanStoev – Sampath