2014-12-01 71 views
1

我已经安装了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找到的程序集的清单定义与程序集引用不匹配

无法加载文件或程序集“Oracle.DataAccess.EntityFramework,Version = 6.121.2.0,Culture = neutral,PublicKeyToken = 89b483f429c47342”或其某个依赖项。定位的程序集清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040) on var db = new BloggingContext()line。

这是我运行的一段代码,我使用的是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>

回答

2

我有同样的问题,我解决了这个办法: 先卸载所有的Nu​​Get包给你任何Oracle供应商,您将不再需要他们。然后右键单击解决方案中的“参考”,然后选择“添加参考...”并添加以下两项:

Path_to_ODAC_installation \ product \ 12.1.0 \ client_1 \ odp.net \ managed \ common \ Oracle。 ManagedDataAccess.dll Path_to_ODAC_installation \产品\ 12.1.0 \ Client_1与\ odp.net \管理\ 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") 
{ 
} 
+0

已将版本= 6.121.2.0更改为“版本= 6.121.1.0”且其完成:p – 2014-12-03 13:01:42

相关问题