Sim*_*ely 2 .net c# sql sql-server sql-server-2008
我正在为我的班级写一个私人方法.我作为参数传递给这个整数列表,表示我的SQL Server 2008表中的行的ID.
我想返回List<string>的的"Name"所有行,其中在整数通过了一个等于一个(列)"ID".所以,如果我传入List<int> {1, 2, 3 }.
我想基本上运行命令(SELECT Name FROM Table WHERE ID = 1 OR ID = 2 OR ID = 3).ToList<string>().
我正在使用的数据库非常繁忙,因此尽可能优化我的解决方案非常重要.考虑到这一点,我想知道是否更好的做法是使用.dbml文件创建指向此数据库的链接并使用Linq to SQL查询数据库?
或者只是创建一个SQLCommand对象,执行一次,遍历读者并将其保存在List中?这样做的最佳方式是什么?是否正在创建.dbml文件来表示非常繁忙的数据库错误做法?
创建.dbml对服务器端性能的影响很小; 这改变了调用端的工具 - 但是服务器不会真正注意到来自.dbml和手工编码的命令之间的区别,至少:不是这么简单(我应该注意复杂查询,手工编码)查询通常可以胜过机器生成的查询.
在呼叫者的表现方面; 一个是的.dbml只是一个包装周围所有常用的命令/读卡器/等-它不能使事情更快.在某些情况下,如果它没有很好地解析表达式,或者没有缓存解析后的结果(就TSQL而言),它可能会变慢.
我会说,虽然是短小精悍将处理这个非常漂亮的你:
var ids = new List<int>{1,2,3};
var names = conn.Select<string>("select Name from Table where ID in @ids",
new {ids}).ToList();
Run Code Online (Sandbox Code Playgroud)
dapper将发现in @ids使用情况,并将其作为参数进行扩展,执行:
select Name from Table where ID in (@p__0, @p__1, @p__2)
Run Code Online (Sandbox Code Playgroud)
(或类似的东西) - 将1,2和3作为这些值传递.
这给你:
更一般地说,dapper也会愉快地处理一般实体映射,例如:
int id = 12345;
var customer = conn.Select<Customer>("select * from Custom where Id = @id",
new { id }).Single();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4151 次 |
| 最近记录: |