2

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

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

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

4

4 回答 4

1

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

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

context.fn_my_db_function(param1, param2, etc);

简单的!

于 2013-04-24T14:33:15.787 回答
0

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

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

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

映射的托管类型在哪里result,并且input是必需的参数参数。

于 2013-04-24T08:32:57.600 回答
0

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

如果您希望数据库执行它(伪),则不是:

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

如果您不希望每次计算都进行数据库往返,那么可以,您必须在 C# 中重写逻辑。

于 2013-04-24T08:33:56.927 回答
-1

这可以通过实体框架实现。请参阅此链接以供参考。

您可以只映射您的存储过程并创建一个访问 get 方法。

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

于 2013-04-24T08:38:18.207 回答