Generating/using table 在 EF Reverse POCO 生成器的帮助下 Entity Framework 6.x 中的值函数

Generating/using table valued functions in Entity Framework 6.x with the help of EF Reverse POCO Generator

在我的项目中,我严重依赖 Simon Hughes 的 EF Reverse POCO 生成器。

我有一个 TVF GetItemSummaries,它有 4 个参数和 returns 一个 table。这个 TVF 实际上是一个视图的补充(我认为生成器由于缺少 PK 而无法识别视图)。 现在,运行 在 SQL Mgnt Studio 中工作正常!

想将该 TVF 添加到 .tt 模板,但我在设置时遇到了问题。 (几乎)没有关于如何执行此操作的信息。

  1. 首先,我将 POCO 与 DBContext 和 *Configuration 类 以及 IDBContext 接口分开。

到目前为止我做了什么:

  1. 我设置 IncludeTableValuedFunctions = true; 并按照说明包含 "EntityFramework.CodeFirstStoreFunctions" Nuget 包。 从那里开始,我迷路了。

  2. 我试图在 TableFilterIncludeStoredProcedureFilterInclude 过滤器正则表达式中包含 TVF 名称。没有运气。该过滤器适用于 tables,但不适用于 TVFs。

  3. 然后我尝试手动将实际函数添加到DBContextIDBContext类,但返回的类型是自定义类型[=21] =],未定义。等等等等

这是我手动添加到 DbContext 的内容(我希望它会为我生成),但仍然不起作用,因为 DbContext 不知道 ItemSummary 类型:

partial void OnModelCreatingPartial( DbModelBuilder modelBuilder )
{
    modelBuilder.Conventions.Add( new FunctionsConvention<BusinessContext>( "dbo" ) );
}

[DbFunction( "BusinessContext", "FindItemSummaries" )]
public IQueryable<ItemSummary> FindItemSummaries( Guid customerId, DateTime startDate, DateTime endDate, int programId )
{
    var customerParameter = new ObjectParameter( "customerId", customerId );
    var startDateParameter = new ObjectParameter( "startDate", startDate );
    var endDateParameter = new ObjectParameter( "endDate", endDate );
    var programIdParameter = new ObjectParameter( "programId", programId );

    var oc = ( ( IObjectContextAdapter ) this ).ObjectContext;
    var query = String.Format( "[{0}].{1}", GetType().Name, "[FindItemSummaries](@customerId, @startDate, @endDate, @programId)" );

    var result = oc.CreateQuery<ItemSummary>( query, customerParameter, startDateParameter, endDateParameter, programIdParameter );

    return result;
}

最重要的是,我不明白如何设置它。有没有人这样做过? "EntityFramework.CodeFirstStoreFunctions" Nuget 包如何以及在哪里发挥作用?我确实阅读了他们关于该主题的博客 post

非常感谢。

将 POCO Generator 更新到版本 2.18.1 后已解决此问题 然后 TVF 按预期出现在 DbContext 中。