Oracle.DataAccess.EntityFramework, Version=6.121.2.0 定位的程序集的清单定义与程序集引用不匹配
Posted
技术标签:
【中文标题】Oracle.DataAccess.EntityFramework, Version=6.121.2.0 定位的程序集的清单定义与程序集引用不匹配【英文标题】:Oracle.DataAccess.EntityFramework, Version=6.121.2.0 The located assembly's manifest definition does not match the assembly reference 【发布时间】:2015-01-29 17:13:16 【问题描述】:我已经安装了 ODAC 12c R3 Beta2、VS2013 Update 4、.net 4.5.2 和 Entity Framework 6.1.2 Beta 来测试 Oracle 数据库的 EF6 代码优先特性。但是出现了错误,不知道怎么办。
无法加载文件或程序集“Oracle.DataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342”或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自 HRESULT 的异常:0x80131040) 在 var db = new BloggingContext() 行上。
这是我运行的一段代码和我使用的 app.config。
static void Main(string[] args)
using (var db = new BloggingContext())
// Create and save a new Blog
Console.Write("Enter a name for a new Blog: ");
var name = Console.ReadLine();
var blog = new Blog Name = name ;
db.Blogs.Add(blog);
db.SaveChanges();
// Display all Blogs from the database
var query = from b in db.Blogs
orderby b.Name
select b;
Console.WriteLine("All blogs in the database:");
foreach (var item in query)
Console.WriteLine(item.Name);
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
public class Blog
public int BlogId get; set;
public string Name get; set;
public virtual List<Post> Posts get; set;
public class Post
public int PostId get; set;
public string Title get; set;
public string Content get; set;
public int BlogId get; set;
public virtual Blog Blog get; set;
public class BloggingContext : DbContext
public DbSet<Blog> Blogs get; set;
public DbSet<Post> Posts get; set;
<connectionStrings>
<add name="Default" providerName="Oracle.DataAccess.Client" connectionString="User Id=_________;Password=__________;Data Source=_________" />
</connectionStrings>
<entityFramework>
<defaultConnectionFactory type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess"></defaultConnectionFactory>
<providers>
<provider invariantName="Oracle.DataAccess.Client" type="Oracle.DataAccess.EntityFramework.EFOracleProviderServices, Oracle.DataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
</entityFramework>
【问题讨论】:
【参考方案1】:我遇到了同样的问题,我是这样解决的: 首先卸载任何为您提供任何 Oracle 提供程序的 nuget 数据包,您将不需要它们。然后右键单击解决方案中的“引用”,然后单击“添加引用...”并添加这两个:
Path_to_ODAC_installation\product\12.1.0\client_1\odp.net\managed\common\Oracle.ManagedDataAccess.dll Path_to_ODAC_installation\product\12.1.0\client_1\odp.net\managed\common\EF6\Oracle.ManagedDataAccess.EntityFramework.dll
(我认为你应该在这里清理和重建)
然后在你的 web.config 中使用它作为提供者
<providers>
<provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
并注释掉您的“默认”连接字符串。 最后但同样重要的是,进入您的 Path_to_ODAC_installation\12.1.0\client_1\Network\Admin\tnsnames.ora 并检查它是否具有正确的连接参数。
最后回到Visual Studio,右键Models,“Add”,“New Item”,“Data”,“ADO.Net Entity Data Model”,“Code First from Database”。在这里使用您的用户名和密码创建一个新连接以访问 Oracle 数据库,连接类型 =>“TNS”并使用您在前一步修改的 tns。测试您的连接并保存(“是的,在连接字符串中包含敏感数据”)。
在这里,我假设您将连接字符串命名为“Model1”。所以,在你声明 BloggingContext 的地方,使用这个构造函数
public BloggingContext():base("Model1")
【讨论】:
将“Version=6.121.2.0”更改为“Version=6.121.1.0”并完成:p以上是关于Oracle.DataAccess.EntityFramework, Version=6.121.2.0 定位的程序集的清单定义与程序集引用不匹配的主要内容,如果未能解决你的问题,请参考以下文章