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 定位的程序集的清单定义与程序集引用不匹配的主要内容,如果未能解决你的问题,请参考以下文章