码迷,mamicode.com
首页 > 数据库 > 详细

Entity Framework 6处理User Defined Function(UDF SQL Server)

时间:2015-04-10 21:54:19      阅读:1518      评论:0      收藏:0      [点我收藏+]

标签:

  随着EF5的发布,新增了对数据库(SQL Server) UDF的支持,具体可以看以下的连接:https://msdn.microsoft.com/en-us/data/hh859577.aspx,新发布的EF6也继承了这个特性。问题是这个UDF貌似只是针对TVF-Table Value Function,在尝试导入一个SCALAR Function的时候,很可惜,该function不能被导入。

  原因就是在EF6的版本里还没有对Scalar Function做支持。。。。。。

  但是也有相应的workaround,因为EF提供了DbFunction类,可以让我们直接在DbContext里写一个cutsom method,然后映射到SSDL里的一段自动生成的XML代码,这段代码是有EF model自动生成的,一个完整的例子:

Scalar Function:

  

CREATE FUNCTION [dbo].[Function20150410]
(
	@param1 int,
	@param2 int
)
RETURNS INT
AS
BEGIN
	RETURN @param1 + @param2
END

 

XML 代码:

<Function Name="Function20150410" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo" ReturnType="int">
          <Parameter Name="param1" Type="int" Mode="In" />
          <Parameter Name="param2" Type="int" Mode="In" />
        </Function>

 

Custom Method in DbContext Class:

[DbFunction("DFDBModel.Store", "Function20150410")]
        public ObjectResult<int> GetContentByIdAndCul(int id, int culture)
        {
            var objectContext = ((IObjectContextAdapter)this).ObjectContext;

            var parameters = new List<ObjectParameter>();
            parameters.Add(new ObjectParameter("Id", id));
            parameters.Add(new ObjectParameter("Culture", culture));

            return objectContext.CreateQuery<int>("DFDBModel.Store.Function20150410(@Id, @Culture)", parameters.ToArray()).Execute(MergeOption.NoTracking);
        }

 

 Call this method:

 

using (DFDBEntities db=new DFDBEntities())
            {
                var result = db.GetContentByIdAndCul(1, 1).FirstOrDefault();
            }

 

  

Entity Framework 6处理User Defined Function(UDF SQL Server)

标签:

原文地址:http://www.cnblogs.com/fred-bao/p/4415510.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!