我必须在我的数据库中定义一个自定义函数来计算实体的“有效期结束日期”。 此函数将用于存储过程,但我需要在Web应用程序中使用相同的逻辑。
我正在使用Linq-to-sql连接到我的数据库并将表映射到类。所以我想知道是否有办法重用我的数据库中定义的功能。我想通过部分课程扩展我的实体。我是否必须在代码中重写逻辑?
注意我需要在C#代码中使用功能而不是存储过程。
答案 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)