我正在使用一个使用Entity Framework 6的大型ASP.NET应用程序。该应用程序包含大量DLL,其中一些包含.edml
文件,相应的实体类以及一些其他业务逻辑用于处理这些实体类(包括从数据库读取和写入数据库)。
此应用程序可以正常运行;那里的Entity Framework没问题。
现在,我正在尝试添加一个命令行工具,该工具可以从上述业务逻辑中调用某些例程。为此,我在命令行应用程序项目中引用了上述DLL。
我已经成功地从控制台应用程序访问数据库,打开连接并运行手写的SQL命令(通过CreateCommand
)。不幸的是,到目前为止,使用Entity Framework的任何调用都失败了,总是导致ArgumentException
的话:
无法确定存储版本;需要有效的存储连接或版本提示。
完整的堆栈跟踪(在留下我们自己的代码之后)是:
System.Data.Entity.Core.ProviderIncompatibleException: An error occurred accessing the database. This usually means that the connection to the database failed. Check that the connection string is correct and that the appropriate DbContext constructor is being used to specify it or find it in the application's config file. See http://go.microsoft.com/fwlink/?LinkId=386386 for information on DbContext and connections. See the inner exception for details of the failure.
---> System.Data.Entity.Core.ProviderIncompatibleException: The provider did not return a ProviderManifestToken string.
---> System.ArgumentException: Could not determine storage version; a valid storage connection or a version hint is required.
bei System.Data.Entity.SqlServer.SqlProviderServices.GetDbProviderManifestToken(DbConnection connection)
bei System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection connection)
bei System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
--- Ende der internen Ausnahmestapelüberwachung ---
bei System.Data.Entity.Utilities.DbProviderServicesExtensions.GetProviderManifestTokenChecked(DbProviderServices providerServices, DbConnection connection)
bei System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.<>c__DisplayClass1.<ResolveManifestToken>b__0(Tuple`3 k)
bei System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)
bei System.Data.Entity.Infrastructure.DefaultManifestTokenResolver.ResolveManifestToken(DbConnection connection)
bei System.Data.Entity.Utilities.DbConnectionExtensions.GetProviderInfo(DbConnection connection, DbProviderManifest& providerManifest)
bei System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection)
这是怎么了?从IIS中运行时,如何像在EF中那样完美地连接我的命令行应用程序?如何找出配置之间的区别?
我发现了各种相关的问题和资源,似乎都没有帮助:
DbContext
对象(EF的DbContext
类的扩展包装)指示的对象是正确的,并用于“手动”访问。 可能,EF并没有使用它,但是我不确定在哪里看。 (也许知道这一点就能回答问题。)__MigrationHistory
表。).edmx
文件。从我正在阅读的内容来看,这些似乎仅以代码优先的方式出现,而我们似乎正在使用数据库优先的方式。就其价值而言,我的命令行应用程序项目中根本没有EF专用文件,因为任何EF专用文件都应该保留在带有部分实体模型的各种DLL文件中。<entityFramework>
部分,因此,我不确定是否可以在其中注册反序列化类。 <configSections>
元素完全可以做到。