0

我建立一个像这样的对象上下文:DLL做什么提供商的EntityConnection使用来创建其StoreConnection

public MyObjectContext(....) : this(contextName, new EntityConnection(connectionString)) 

连接字符串是一个连接字符串到Oracle数据库。我使用DevArt作为提供商btw。

,一切工作正常。我可以用它来检索实体等。

但是后来我想对底层连接做些事情。我不喜欢的东西:

(OracleConnection)((EntityConnection)context.Connection.StoreConnection) 

使我有以下异常:

SystemInvalidCastException: [A]Devart.Data.Oracle.OracleConnection cannot be converted to [B]Devart.Data.Oracle.OracleConnection. .... Type A is from C:\Windows\....\6.60.283\.... Type B is from C:\DevDirectory\...\7.2.104.0 

看来,ObjectContext的使用旧版本的DLL。但是,如果我检查我的项目的参考,我会看到对正确版本7.2.104.0的引用。当我进一步检查时,即使我的子类中没有任何参考,ObjectContext仍然可以连接。

它如何解决它用于连接的DLL?

+0

看来旧版本还在GAC中。 –

+0

这是否意味着即使在项目本身中引用了较新的版本,实体框架也会首先在GAC中查找DLL?对我来说似乎很陌生... – user685428

+0

不,但可能会在项目(程序集)中对您执行强制转换的新版本进行引用,而包含EF类型的程序集是使用较旧的(GAC)版本构建的。假设它们是独立的程序集。 –

回答

0

是的,我刚刚意识到,我仍然有错误的版本(6)devArt安装(全球),但在项目中引用正确的版本(7)。包含ObjectContext的程序集没有参考,因此它需要从旧的GAC中获取版本(6)。

Thx。澄清。