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

本文关键字:T-SQL 自定义函数 代码 | 更新日期: 2023-09-27 18:10:34

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

我使用Linq-to-sql连接到我的DB和映射表到类。所以我想知道是否有一种方法可以重用在我的DB中定义的函数。我想通过分部类扩展我的实体。我必须在我的代码中重写逻辑吗?

注意我需要在我的c#代码中使用函数而不是存储过程

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

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

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

context.fn_my_db_function(param1, param2, etc);

简单!

我必须重写代码中的逻辑吗?

如果你想让数据库执行它(psuedo):

public static YourReturnType Calculate(this TEntity foo)
{
    return database.ExecuteFunction("calculate", foo);
}
如果你不想每次计算都要数据库往返,那么是的,你必须用c#重写逻辑

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

就像c#中的函数一样,例如:

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

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

这在实体框架中是可能的。参考链接。

你可以直接映射你的存储过程并创建一个访问获取方法。

但是如果你只是想在数据库中执行你创建的过程。