如何在实体框架代码优先方法中使用表值函数?

Posted

技术标签:

【中文标题】如何在实体框架代码优先方法中使用表值函数?【英文标题】:How to use table valued function in entity framework code first approach? 【发布时间】:2013-05-27 08:37:34 【问题描述】:

我正在使用 Entity Framework 进行一个项目,现在我遇到了一种情况,我需要使用表值函数,它返回具有 2 列的表,因此我搜索了很多,我知道我们使用表值函数数据库优先的方法,而我在代码中首先需要它。

情况是这样的

我有一个有两列的表

Table1

Id int PK
priority int

我想在我的 EF 查询中使用这个表。

他们有什么方法可以使用表值函数吗?

【问题讨论】:

我从这篇文章中得到了一些帮助,但我不确定它是否有效,blogs.msdn.com/b/adonet/archive/2011/06/30/… 【参考方案1】:

我们可以通过使用 CLR 生成的 C# 代码为数据库优先方法来做到这一点

您可以参考此网址获取完整说明 http://blogs.msdn.com/b/adonet/archive/2011/06/30/walkthrough-table-valued-functions-june-ctp.aspx

我用过这段代码,对我来说效果很好

[EdmFunction("NorthwindEntities", "GetDetailsForOrder")]
public IQueryable<Order_Detail> GetDetailsForOrder(Nullable<global::System.Int32> oid)

ObjectParameter oidParameter;
if (oid.HasValue)

    oidParameter = new ObjectParameter("Oid", oid);

else

    oidParameter = new ObjectParameter("Oid", typeof(global::System.Int32));


return base.CreateQuery<Order_Detail>("[NorthwindEntities].[GetDetailsForOrder](@Oid)", oidParameter);

【讨论】:

【参考方案2】:

我创建了一个自定义模型约定,它允许在 EF6.1 的 CodeFirst 中使用存储函数。该约定在 NuGet http://www.nuget.org/packages/EntityFramework.CodeFirstStoreFunctions 上可用。这是包含所有详细信息的博文链接:http://blog.3d-logic.com/2014/04/09/support-for-store-functions-tvfs-and-stored-procs-in-entity-framework-6-1/

【讨论】:

以上是关于如何在实体框架代码优先方法中使用表值函数?的主要内容,如果未能解决你的问题,请参考以下文章

实体框架、代码优先和全文搜索

使用实体框架的表值函数

如何在实体框架中定义存储过程(代码优先)?

在实体框架数据库优先方法中,如何从存储过程返回多个结果集?

如何使用实体框架代码优先从数据库中删除所有相关实体

如何使用代码优先实体框架在 ASP.Net MVC3 中重新加载多对多导航属性