[英]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.