在我的项目中,我非常依赖Simon Hughes的EF Reverse POCO生成器。借助EF Reverse POCO Generator在Entity Framework 6.x中生成/使用表值函数
我有一个TVF GetItemSummaries
需要4个参数并返回一个表。这个TVF实际上是视图的补充(并且由于缺乏PK,发电机不能识别视图,我认为)。 现在,在SQL Mgnt Studio中运行该工作正常!
我想要将该TVF添加到.tt模板但我在设置时遇到问题。几乎没有关于如何做到这一点的信息。
- 首先,我将POCOs与DBContext和* Configuration类以及IDBContext接口分开。
什么我迄今所做的:
我设置
IncludeTableValuedFunctions = true;
和包括“EntityFramework.CodeFirstStoreFunctions” NuGet包的指示。 从那里,我迷路了。我试图在
TableFilterInclude
和StoredProcedureFilterInclude
过滤器正则表达式中包含TVF名称。没有运气。该过滤器适用于表格,但不适用于TVF。然后我试图手动添加的实际作用是将
DBContext
和IDBContext
类,但返回的类型为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如何以及在哪里发挥作用?我确实已经阅读了他们关于该主题的博客文章
非常感谢。
为了以防万一 - 这里是解释如何映射东西的帖子,我在发布包时写道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