【问题标题】:Use DBContext with Oracle将 DBContext 与 Oracle 一起使用
【发布时间】:2019-02-28 21:24:00
【问题描述】:

我在网上搜索并查看了有关 Stack Overflow 的类似问题,但我不知道如何将 Oracle Managed Data Provider 与来自 C# .Net 4.6 控制台应用程序的 DbContext 一起使用。

这适用于 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 上找到的所有示例都不起作用,其中“类型初始化器引发异常”的各种错误是最受欢迎的。

【问题讨论】:

    标签: c# oracle entity-framework-6 database-connection


    【解决方案1】:

    不确定我做了什么不同,但现在它对后代有效。

    在 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;
        }
    }
    

    这之前失败了,但现在可以了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-09-07
      • 2021-02-09
      • 2013-06-29
      • 1970-01-01
      • 2017-11-20
      • 2019-04-12
      • 2014-11-12
      • 2011-12-24
      相关资源
      最近更新 更多