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;



许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因