gpt4 book ai didi

c# - 为存储过程创建可重用的 Linq To SQL

转载 作者:可可西里 更新时间:2023-11-01 03:08:42 25 4
gpt4 key购买 nike

我正在处理一个需要使用 Linq To SQL 的新项目。我被要求创建一个可用于执行存储过程的通用或可重用的 Linq to SQL 类。

ADO.Net 中,我知道如何通过传递一个我想执行的字符串来做到这一点,我可以为每个需要运行的查询传递不同的字符串:

SqlCommand cmd = new SqlCommand("myStoredProc", conn); // etc, etc

我正在为如何在 Linq To SQL 中创建类似的东西而苦苦挣扎,如果可能的话。我创建了一个 .dbml 文件并向其中添加了我的存储过程。因此,我可以使用以下代码返回结果:

public List<myResultsStoreProc> GetData(string connectName)
{
MyDataContext db = new MyDataContext (GetConnectionString(connectName));
var query = db.myResultsStoreProc();

return query.ToList();
}

代码有效,但他们希望我创建一个方法,该方法将返回我告诉它运行的任何存储过程。我在网上搜索并与同事讨论过这个问题,但未能找到创建可重用存储过程类的方法。

那么有没有办法创建一个可重用的 Linq to SQL 类来执行存储过程?

编辑:

我正在寻找的是是否有一种方法可以执行以下操作?

public List<string> GetData(string connectName, string procedureName)
{
MyDataContext db = new MyDataContext (GetConnectionString(connectName));
var query = db.procedureName();

return query.ToList();
}

我已经查看了 MSDN docsLinq To Sql 上,这些在 IEnumerable 中显示表格:

IEnumerable<Customer> results = db.ExecuteQuery<Customer>(
@"select c1.custid as CustomerID, c2.custName as ContactName
from customer1 as c1, customer2 as c2
where c1.custid = c2.custid"
);

我正在寻找非常通用的东西,我可以在其中发送我想要执行的存储过程的字符串值。如果这是不可能的,是否有任何文件说明为什么不能这样做?我需要证明为什么我们不能传递要在 Linq To Sql

中执行的过程名称的字符串值

最佳答案

DataContext.ExecuteCommand 并不是您要找的,因为它只返回一个 int 值。您想要的是 DataContext.ExecuteQuery,它能够执行存储过程并返回数据集。

我会为您的 DBML 创建一个部分类来存储此函数。

public List<T> GetDataNoParams(string procname)
{
var query = this.ExecuteQuery<T>("Exec " + procname);

return query.ToList();
}

public List<T> GetDataParams(string procname, Object[] parameters)
{
var query = this.ExecuteQuery<T>("Exec " + procname, parameters);

return query.ToList();
}

要调用存储过程,您可以这样做:

GetDataNoParams("myprocedurename");

GetDataParams("myotherprocedure {0}, {1}, {2}", DateTime.Now, "sometextValue", 12345);

GetDataParams("myotherprocedure var1={0}, var2={1}, var3={2}", DateTime.Now, "sometextValue", 12345);

如果你想调用没有返回值的过程,这也很容易,我相信你可以看到,通过创建一个不存储/返回任何东西的新方法。

灵感来自http://msdn.microsoft.com/en-us/library/bb361109(v=vs.90).aspx .

关于c# - 为存储过程创建可重用的 Linq To SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10822811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com