gpt4 book ai didi

c# - Oracle.DataAccess.EntityFramework,Version=6.121.2.0 找到的程序集的 list 定义与程序集引用不匹配

转载 作者:太空宇宙 更新时间:2023-11-03 10:37:14 25 4
gpt4 key购买 nike

我已经安装了 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”或其依赖项之一。找到的程序集的 list 定义与程序集引用不匹配。 (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>

最佳答案

我遇到了同样的问题,我是这样解决的:首先卸载为您提供任何 Oracle 提供程序的任何 nuget 数据包,您将不需要它们。然后右键单击解决方案中的“引用”,然后“添加引用...”并添加这两个:

Path_to_ODAC_installation\product\12.1.0\client_1\odp.net\managed\common\Oracle.ManagedDataAccess.dllPath_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")
{
}

关于c# - Oracle.DataAccess.EntityFramework,Version=6.121.2.0 找到的程序集的 list 定义与程序集引用不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27232782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com