Как я могу сначала вызвать хранимые процедуры oracle DB, которые имеют несколько рефкурсоров с использованием кода EF6 - существующий подход к базе данных?

Я новичок в Entity framework. У меня есть существующая база данных oracle с несколькими хранимыми процедурами, которые имеют несколько курсоров ref. Теперь я пытаюсь получить доступ к этим хранимым процедурам, используя первый подход кода EF6. Как я могу это сделать, пожалуйста, помогите мне.

Например, у меня есть Country.cs, как показано ниже:

public partial class Country
{
    public decimal Id { get; set; }
    public string Code { get; set; }
    public string Name { get; set; }
    public string ForeignName { get; set; }
    public string StateFlag { get; set; }
    public string ZipCodeFlag { get; set; }
    public string EUFlag { get; set; }
    public string CrossBookingFlag { get; set; }
    public string Status { get; set; }
    public Nullable<System.DateTime> CreatedOn { get; set; }
    public Nullable<decimal> LastUpdatedBy { get; set; }
    public Nullable<System.DateTime> LastUpdatedOn { get; set; }
    public Nullable<decimal> PurgeYear { get; set; }
}

и у меня есть хранимая процедура Oracle "ibp_country_mstr_getlist", как показано ниже:

procedure ibp_country_mstr_getlist
      (       
       p_country_id   in     number,           
       p_cntry_getlist out   SYS_REFCURSOR
       )as begin
  open   p_cntry_getlist  for
  select /*+index(ibt_country_master country_mas_status_idx)*/country_pid,country_code,country_name,country_fname
 from     ibt_country_master
where     country_pid=p_country_id
and       country_status in ('A','D'); end;

Как я могу получить доступ к этой хранимой процедуре, используя сначала код ef6 для существующей базы данных, и назначить возвращаемый набор результатов в список?


person dharma    schedule 16.04.2015    source источник


Ответы (1)


Используйте доступ к данным телерика, это работает для меня. сначала загрузите телерик и сопоставьте свою базу данных с помощью Telerik Data Access Domain Modelзатем в Model Schema Explorer найдите свою хранимую процедуру и щелкните правой кнопкой мыши stored procedure, затем create domain method и щелкните Retrieve Result Shape и создайте сложный тип

using (EntitiesModel1 entitiesModel1 = new EntitiesModel1())
{
    var z = entitiesModel1.GETBINDEDSUBSCRIPTIONSP("some text");
    Console.WriteLine(z.Count());
}

вы получите такое исключение: Unable to cast object of type Oracle.DataAccess.Client.OracleParameter' to type Oracle.ManagedDataAccess.Client.OracleParameter'.
перейдите к определению хранимой процедуры и измените Oracle.DataAccess.Client.OracleParameter на Oracle.ManagedDataAccess.Client.OracleParameter и укажите направление параметра для каждого параметра.
не забудьте добавить Oracle.ManagedDataAccess в качестве ссылки на ваш проект.

person danarj    schedule 16.04.2015
comment
Спасибо за ваш ответ, но, к сожалению, я не могу использовать доступ к данным телерика, я должен использовать только EF ORM. Какова процедура для этого с использованием первого подхода кода EF - person dharma; 19.04.2015