Конвейерная функция как сущность в EF / MVC - PullRequest
0 голосов
/ 05 февраля 2020

У меня есть приложение. Net MVC, использующее структуру сущностей, и обычно я использую таблицу или представление в сущности данных ... например.

[Table("company_details"", Shema = "abd")]
public class CompanyDetails
{
    [Key]
    [Column("cd_id_pk")]
    public int CompanyDetailsId { get; set; }
    etc ...
    etc ...

... где company_details - таблица oracle.

Однако мне нужно попытаться использовать конвейерную функцию .... например, sql будет:

SELECT * FROM TABLE(abd.company_pck.f_single_rprt('1A122F', '01-Feb-2020','Y'));

Это было использовано в отчете, используемом в формах Oracle, но теперь он должен быть включен в приложение. Net MVC.

Как включить конвейерную функцию в мою сущность?

заранее спасибо

1 Ответ

1 голос
/ 05 февраля 2020

Я только что попробовал это, и, кажется, работает. Сначала создайте класс, как если бы вы могли отобразить результат из вашего 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')")

enter image description here

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