2016-02-12 187 views
0

在我的项目中,我非常依赖Simon Hughes的EF Reverse POCO生成器。借助EF Reverse POCO Generator在Entity Framework 6.x中生成/使用表值函数

我有一个TVF GetItemSummaries需要4个参数并返回一个表。这个TVF实际上是视图的补充(并且由于缺乏PK,发电机不能识别视图,我认为)。 现在,在SQL Mgnt Studio中运行该工作正常!

想要将该TVF添加到.tt模板但我在设置时遇到问题。几乎没有关于如何做到这一点的信息。

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

什么我迄今所做的:

  • 我设置IncludeTableValuedFunctions = true;和包括“EntityFramework.CodeFirstStoreFunctions” NuGet包的指示。 从那里,我迷路了。

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

  • 然后我试图手动添加的实际作用是将DBContextIDBContext类,但返回的类型为ItemSummary型,这是没有定义的自定义类型。等等,等等

  • 这是我手动添加到的DbContext(我希望会为我生成),但仍然无法正常工作,sinece的的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 Package如何以及在哪里发挥作用?我确实已经阅读了他们关于该主题的博客文章

    非常感谢。

    +0

    为了以防万一 - 这里是解释如何映射东西的帖子,我在发布包时写道https://blog.3d-logic.com/2014/04/09/support-for-store-functions- tvfs-and-stored-procs-in-entity-framework-6-1 /,后面还有更多的功能:https://blog.3d-logic.com/2014/08/11/the-的β-版本的店内函数换的EntityFramework-6-1-1代码先可用/ – Pawel

    回答

    1

    在将POCO生成器更新为版本2.18.1之后解决了这个问题。 TVF随后按预期出现在DbContext中。

    相关问题