Я только что попробовал это, и, кажется, работает. Сначала создайте класс, как если бы вы могли отобразить результат из вашего DbContext. В вашем случае вы просто вызываете табличную табличную функцию из Oracle. Я использовал TVF в SQL для демонстрации. TVF вернул 3 столбца данных, 2 INT и 1 NVarChar.
public class ReturnThreeColumnTableFunction
{
public int ColumnOne { get; set; }
public int ColumnTwo { get; set; }
public string ColumnThree { get; set; }
}
Затем на основе вашей Oracle конвейерной функции (см. Мой MS SQL TVF ниже)
/* SQL TableValuedFunction */
ALTER FUNCTION [dbo].[ReturnThreeColumnTableFunction]
(
@ColumnOne INT,
@ColumnTwo INT,
@ColumnThree NVARCHAR(10)
)
RETURNS TABLE
AS
RETURN
(
SELECT @ColumnOne AS ColumnOne, @ColumnTwo AS ColumnTwo, @ColumnThree AS ColumnThree
)
Затем в своем классе DbContext вы настраиваете свои сущности CodeFirst, обязательно добавьте сложный тип в метод OnModelCreating.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<ReturnThreeColumnTableFunction>();
modelBuilder.ComplexType<ReturnThreeColumnTableFunction>().Property(x => x.ColumnOne).HasColumnName("ColumnOne");
modelBuilder.ComplexType<ReturnThreeColumnTableFunction>().Property(x => x.ColumnTwo).HasColumnName("ColumnTwo");
modelBuilder.ComplexType<ReturnThreeColumnTableFunction>().Property(x => x.ColumnThree).HasColumnName("ColumnThree");
}
Затем вы легко возвращаете это, используя SqlQuery
var items = context.Database.SqlQuery<ReturnThreeColumnTableFunction>("SELECT * FROM dbo.ReturnThreeColumnTableFunction(1,2,'3')")