无法在 ASP.NET Core 1 应用程序中使用 oracle 管理的驱动程序

Can't use oracle managed driver in ASP.NET Core 1 app

我正在尝试从 ASP.NET Core RC1 迁移到 1.0.0-preview2,但在使用之前运行的 Oracle 托管驱动程序时遇到问题。我在尝试创建新的 OracleConnection 时遇到以下错误:

Error CS0012 The type 'DbConnection' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Ludens.Data..NETCoreApp,Version=v1.0 16 Active

这是我使用它的代码:

using System;
using Oracle.ManagedDataAccess.Client;
using Microsoft.Extensions.Options;
using Ludens.Common;
using System.Data;

namespace Ludens.Data
{
  public class LegacyContext : IDisposable
  {
    public IDbConnection Connection { get; }

    public LegacyContext(IOptions<LudensSettings> options)
    {
      var appSettings = options.Value;
      Connection = new OracleConnection(appSettings.Oracle.Connection);
      Connection.Open();
    }

    public void Dispose()
    {
      Connection.Dispose();
    }
  }
}

还有我的 package.json:

{
  "version": "1.0.0-*",

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
    "Dapper": "1.50.0",
    "Oracle.ManagedDataAccess": "12.1.24160419",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Ludens.Common": "1.0.0"
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8",
        "net451"
      ]
    }
  }
}

我觉得我错误地指定了依赖关系,但弄清楚我遗漏了什么。请指教

如@LexLi 所述,Oracle 尚不支持 .net 核心,因此您将无法定位 netcoreapp1.0。

但是,如果您只针对 windows 平台,您可以简单地针对受支持的 .net 框架:

"frameworks": {
  "net451": { }
}

这至少允许您在 .net core 中进行开发,当 Oracle 支持确实到来时,升级应该只是修改您的 project.json.

请注意,如果您想对 Oracle 使用 Entity Framework 7,这仍然行不通,您需要等待支持的库。

我也遇到了 DbConnection 错误。 对我有用的是添加对 System.Data 的引用,基本上错误会告诉您这样做。 我也花了一段时间才弄明白。

简而言之:

  • 右键单击项目的 "References"。
  • 点击"Add Reference..."
  • 从 .NET Framework 4.6.1(或类似版本),select "System.Data" 并单击“确定”。
  • VS 将处理更改并且错误将消失。