2

我有2个项目。第一个项目是一个dll项目,第二个是一个mvc4网站。在 dll 中,我有一个实体数据模型,我自动生成了 DbContext。

在 Global.asax 我用这一行初始化数据库:

System.Data.Entity.Database.SetInitializer( new DropCreateDatabaseAlways<WebConfigEntities>() );

当我启动网站时,我得到一个 TypeLoadException

Server Error in '/' Application.
GenericArguments[0], WebConfigDB.WebConfigEntities, voor System.Data.Entity.IDatabaseInitializer`1[TContext] is in strijd met de beperking van typeparameter TContext.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.TypeLoadException: GenericArguments[0], WebConfigDB.WebConfigEntities, voor System.Data.Entity.IDatabaseInitializer`1[TContext] is in strijd met de beperking van typeparameter TContext.

Source Error:

Line 46: 
Line 47:            BundleTable.Bundles.EnableDefaultBundles();
Line 48:        }
Line 49:    }
Line 50: }


Source File: D:\projecten\MD2400\WebConfig\Global.asax.cs    Line: 48

Stack Trace:

[TypeLoadException: GenericArguments[0], WebConfigDB.WebConfigEntities, voor System.Data.Entity.IDatabaseInitializer`1[TContext] is in strijd met de beperking van typeparameter TContext.]
   WebConfig.MvcApplication.Application_Start() in D:\projecten\MD2400\WebConfig\Global.asax.cs:48

我怎么解决这个问题?

4

3 回答 3

6

这种类型的错误通常表明不同的程序集以某种方式引用了不同版本的 EntityFramework.dll。确保您的所有项目(以及任何其他引用程序集)都使用完全相同的版本。此外,请确保您在 GAC 中没有 EntityFramework.dll,或者如果您必须在 GAC 中拥有它,那么它也与所引用的版本相同。

如果您使用的是针对不同版本构建的外部依赖项并且您无法更改它,那么您可能需要设置绑定重定向以确保 CLR 正确解析版本。

于 2012-06-01T15:23:56.407 回答
0

例外的翻译会有所帮助。在泛型方法调用中指定上下文有帮助吗?像这样:

System.Data.Entity.Database.SetInitializer<WebConfigEntities>( new DropCreateDatabaseAlways<WebConfigEntities>() );

您如何将 connectionString 传递给 WebConfigEntities 类?你能发布它的构造函数吗?

EntityFramework 做了一些魔术来从.config文件中检索 connectionString。如果您将模型放在单独的 dll 中,则可能效果不佳。这并不意味着您不能将模型放在 dll 中,当然可以。我已经为几个项目做到了这一点。

于 2012-06-01T12:52:46.803 回答
0

我犯了从 EF dll 的解决方案资源管理器获取版本号的错误,而不是 nuget 包的版本。所以,我加载了 nuget 包版本 6.0.0 而不是 6.2.0。

请注意,这些版本不是一回事

于 2020-06-08T17:23:39.117 回答