我是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?
答案 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
作为项目的参考。