MySQL實體框架 - 生成模型時超時

edmgen entity-framework mysql

我在MySQL中構建了一個數據庫,我試圖用Entity Framework映射它,但每當我嘗試向EF上下文添加超過20個表時,我就會開始運行“GenerateSSDLException”。

嘗試從數據庫更新時發生“Microsoft.Data.Entity.Design.VisualStudio.ModelWizard.Engine.ModelBuilderEngine + GenerateSSDLException”類型的異常。異常消息是:'執行命令定義時發生錯誤。有關詳細信息,請參閱內部異常。

命令執行期間遇到致命錯誤。

超時已過期。操作完成之前經過的超時時間或服務器沒有響應。

受影響的表沒有什麼特別之處,並且它永遠不會是相同的表,只是在添加了某個(非特定)數量的表後,如果沒有“超時過期”錯誤,則無法再更新上下文。有時它只留下一張桌子,有時它只有三張;結果非常不可預測。此外,在錯誤之前可以添加的表數的變化向我表明,問題可能在於生成的查詢的大小以更新包括現有表定義的上下文,以及新表。正在加入它。本質上,SQL查詢變得太大,並且由於某種原因而無法執行。

如果我使用EdmGen2生成模型,它可以正常工作,但生成的EDMX文件無法在Visual Studio中更新而不會產生上述異常。

很可能這個問題的根源在於Visual Studio中的工具,因為EdmGen2工作正常,但我希望其他人可以就如何處理這個非常獨特的問題提供一些建議,因為看起來我不是唯一經歷過它的人

一位同事提出的一個建議是維護兩個單獨的EBMX文件和一些表格交叉,但在我看來,這似乎是一個非常難看的修復。我想這是我嘗試使用“新技術”的原因。 :(

一般承認的答案

我整個下午都對這個問題感到頭疼。但是,我找到了一個解決方案,您只需在app.config或web.config中添加一個語句,其中您的EF desinger連接存在為'Default Command Timeout = 300000;'。問題消失了。


熱門答案

以上建議不正確。

Default Command Timeout是您需要更改的唯一連接字符串參數。 Connect Time只是規定了首先等待連接的時間;那不是你的問題。

Default Command Timeout似乎對Connector / Net 6.3.4的連接字符串沒有影響。我認為這是Connector / Net中的一個錯誤 ,我向Oracle提交了一個錯誤報告編輯:此錯誤已被MySql開發人員確認,並已於2010年10月13日修復。修正案分別放在6.0.8,6.1.6,6.2.5和6.3.5中。

我解決這個問題的唯一方法是將我的ObjectContext對象的CommandTimeout屬性更改為null以外的其他屬性。如果它為null,則應該使用每個MSDN的“基礎提供者”中的值。如果不為null,則它是超時前的秒數的權威值。

例如:

var context = new CitationData.de_rawEntities();
context.CommandTimeout = 180;


Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因