繁体   English   中英

作为 EF/MVC 中的实体的流水线函数

[英]Pipelined function as entity in EF/MVC

我有一个使用实体框架的 .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 应用程序中。

如何在我的实体中包含流水线函数?

提前致谢

我刚试过这个,它似乎有效。 首先创建一个类,以便能够映射 DbContext 的返回。 在您的情况下,您只需从 Oracle 调用流水线表函数。 我在 SQL 中使用了 TVF 来演示。 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 Pipelined 函数,(请参阅下面我的 MSSQL 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')")

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM