Используйте DBContext с Oracle - PullRequest
0 голосов
/ 01 марта 2019

Я искал в Интернете и просматривал похожие вопросы о переполнении стека, но не могу понять, как использовать поставщик управляемых данных Oracle с DbContext из консольного приложения C # .Net 4.6.

Это работает для SqlExpress

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, используя строку подключения

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

Я могу подключиться к Oracle из Visual Studio 2017 и проверил строку подключенияиспользуя стандартный 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; }
}

Ни один из примеров, которые я нашел в работе с переполнением стека, различные ошибки, из которых «Тип инициализатора вызвал исключение», является наиболее популярным.

1 Ответ

0 голосов
/ 01 марта 2019

Не уверен, что я сделал по-другому, но теперь это работает, для будущих поколений.

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

Это не удавалось раньше, но работает сейчас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...