如何首先使用EF6代码调用具有多个refcursor的oracle DB存储过程 - 现有数据库方法?

时间:2015-04-16 11:51:00

标签: stored-procedures ef-code-first entity-framework-6 oracle12c

我是Entity框架的新手。我有几个存储过程的oracle db,它有多个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代码为现有数据库访问此存储过程并将返回的结果集分配给List?

1 个答案:

答案 0 :(得分:0)

使用telerik数据访问它对我有用。 首先使用Telerik Data Access Domain Model下载telerik并映射您的数据库然后在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作为项目的参考。