我必须在我的数据库中定义一个自定义函数来计算实体的“有效期结束日期”。此函数将在存储过程中使用,但我需要在 Web 应用程序中使用相同的逻辑。
我正在使用 Linq-to-sql 连接到我的数据库并将表映射到类。所以我想知道是否有办法重用我的数据库中定义的函数。我想通过部分类扩展我的实体。我必须重写代码中的逻辑吗?
注意我需要在我的 C# 代码中使用函数而不是存储过程。
我必须在我的数据库中定义一个自定义函数来计算实体的“有效期结束日期”。此函数将在存储过程中使用,但我需要在 Web 应用程序中使用相同的逻辑。
我正在使用 Linq-to-sql 连接到我的数据库并将表映射到类。所以我想知道是否有办法重用我的数据库中定义的函数。我想通过部分类扩展我的实体。我必须重写代码中的逻辑吗?
注意我需要在我的 C# 代码中使用函数而不是存储过程。
我发现可以通过 Linq-to-Sql 调用 SQL Server DB 中定义的函数。
dbml
我刚刚在上下文文件中导入了函数对象。所以我可以这样调用它:
context.fn_my_db_function(param1, param2, etc);
简单的!
您可以创建一个存储过程,然后在您的 DBML 设计器中将其拖到方法窗格中,这将尝试自动检测返回类型和输入,并通过上下文实例公开。如果需要,您可以使用 Visual Studio 中的 Properties 视图将返回类型映射到表模型或自定义模型或其他东西。
这就像 C# 中的函数一样被调用,例如:
using (var context = new MyDataContext()) {
var result = context.MyStoredProcedure(input);
}
映射的托管类型在哪里result
,并且input
是必需的参数参数。
我必须重写代码中的逻辑吗?
如果您希望数据库执行它(伪),则不是:
public static YourReturnType Calculate(this TEntity foo)
{
return database.ExecuteFunction("calculate", foo);
}
如果您不希望每次计算都进行数据库往返,那么可以,您必须在 C# 中重写逻辑。