将DBContext与Oracle一起使用

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (151)

我已经在Web上搜索并查看了有关Stack Overflow的类似问题,但我无法想象如何使用来自C#.Net 4.6控制台应用程序的DbContext的Oracle托管数据提供程序。

这适用于Sql Express

class SqlDBContext1 : DbContext
{
    public SqlDBContext1() : base("SqlExpressDB")
    {
        using (var ctx = this)
        { var query = from c_codes in ctx.CountryCodes select c_codes; }
    }
    public DbSet<CountryCode> CountryCodes { get; set; }
}

这适用于使用连接字符串连接到远程Sql Server

class SqlDBContext2 : DbContext
{
    public SqlDBContext2() : base(SqlServerString())
    {
        using (var ctx = this)
        { var query = from c_codes in ctx.CountryCodes select c_codes; }
    }
    public DbSet<CountryCode> CountryCodes { get; set; }
    private static string SqlServerString()
    {
        return @"Data Source=192.168.0.1;" +
                "Initial Catalog=SqlDB1; " +
                "Persist Security Info=True; " +
                "User ID=USER1; " +
                "Password=PASS1";
    }
}

我可以从Visual Studio 2017连接到Oracle,并且我已经使用标准OracleConnection验证了连接字符串,它打开和关闭,没问题。

有了这个在APP.CONFIG

  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="ORCL1" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL1))) "/>
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>
  <connectionStrings>
    <add name="ORCL1DB" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=USER1;Password=PASS1;Data Source=ORCL1"/>
  </connectionStrings>

我可以使用这样的东西吗?如果是这样,什么进入DbContext的基本构造函数?

class OraDBContext : DbContext
{
    public OraDBContext() : base("What goes here")
    {
        using (var ctx = this)
        { var query = from c_codes in ctx.CountryCodes select c_codes; }
    }
    public DbSet<CountryCode> CountryCodes { get; set; }
}

我在Stack Overflow上找到的所有例子都没有,其中“Type Initializor引发异常”的各种错误是最受欢迎的。

提问于
用户回答回答于

不确定我做了什么不同但现在它适用于后代。

在APP.CONFIG我有这个

  <oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="ORCL1" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.1)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL1))) "/>
      </dataSources>
    </version>
  </oracle.manageddataaccess.client>
  <connectionStrings>
    <add name="ORCL1DB" providerName="Oracle.ManagedDataAccess.Client" connectionString="User Id=USER1;Password=PASS1;Data Source=ORCL1"/>
  </connectionStrings>

我的类看起来像这样

class OraDBContext : DbContext
{
    public OraDBContext() : base(ORCL1COnnection(), true)
    {
        using (var ctx = this)
        {
            var query = from c_codes in ctx.CountryCodes select c_codes;
        }
    }

    public DbSet<CountryCode> CountryCodes { get; set; }

    public static OracleConnection ORCL1COnnection()
    {
        var c1 = ConfigurationManager.ConnectionStrings["ORCL1DB"];
        OracleConnection ora_con = new OracleConnection(c1.ConnectionString);
        return ora_con;
    }
}

失败了,但现在正在运作。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励