在C#代码中使用T-SQL自定义函数

时间:2013-04-24 08:28:36

标签: c# .net sql-server tsql linq-to-sql

我必须在我的数据库中定义一个自定义函数来计算实体的“有效期结束日期”。 此函数将用于存储过程,但我需要在Web应用程序中使用相同的逻辑。

我正在使用Linq-to-sql连接到我的数据库并将表映射到类。所以我想知道是否有办法重用我的数据库中定义的功能。我想通过部分课程扩展我的实体。我是否必须在代码中重写逻辑?

注意我需要在C#代码中使用功能而不是存储过程

4 个答案:

答案 0 :(得分:1)

我发现可以通过Linq-to-Sql调用SQL Server DB中定义的函数。

我刚刚在dbml上下文文件中导入了函数对象。所以我可以这样调用它:

context.fn_my_db_function(param1, param2, etc);

简单!

答案 1 :(得分:0)

您可以创建一个存储过程,然后在您的DBML设计器中将其拖动到方法窗格,这将尝试自动检测返回类型和输入,并通过上下文实例公开。如果需要,可以使用Visual Studio中的“属性”视图将返回类型映射到表模型或自定义的模型或其他内容。

这就像C#中的函数一样被调用,例如:

using (var context = new MyDataContext()) {
  var result = context.MyStoredProcedure(input);
}

其中result是映射的托管类型,input将是必需的参数参数。

答案 2 :(得分:0)

  

我是否必须在代码中重写逻辑?

如果您希望数据库执行它(psuedo):

public static YourReturnType Calculate(this TEntity foo)
{
    return database.ExecuteFunction("calculate", foo);
}

如果您不希望每次计算都进行数据库往返,那么是的,您将不得不重写C#中的逻辑。

答案 3 :(得分:-1)

使用Entity Framework可以实现这一点。请参阅此link以供参考。

您只需映射存储过程并创建访问获取方法。

但是,如果您只想在数据库中执行创建的过程。 。请参阅此link