Sql 使用Dapper返回实体时,是否应指定列列表?

Sql 使用Dapper返回实体时,是否应指定列列表?,sql,database,performance,dapper,rdbms,Sql,Database,Performance,Dapper,Rdbms,你更喜欢哪一种?为什么 db.QuerySelect*from Students.ToList 或 db.query从Students.ToList中选择Id、FirstName、LastName、地址、年龄等 在关系数据库方面 描述越多,RDBMS越好。这是因为,RDBMS不需要解析符号 所以,选择Id,。。。。从学生那里得到的更好。因为这样,RDBMS就不需要解析* 此外,使用此选项,您可以轻松限制要选择的列。但这并不是一个好的比较,因为*和所选列可能是不同的主题 此外,选择Id,。。。。来

你更喜欢哪一种?为什么

db.QuerySelect*from Students.ToList

db.query从Students.ToList中选择Id、FirstName、LastName、地址、年龄等

在关系数据库方面 描述越多,RDBMS越好。这是因为,RDBMS不需要解析符号

所以,选择Id,。。。。从学生那里得到的更好。因为这样,RDBMS就不需要解析*

此外,使用此选项,您可以轻松限制要选择的列。但这并不是一个好的比较,因为*和所选列可能是不同的主题

此外,选择Id,。。。。来自dbo。学生甚至更好。这也告诉RDBMS学生表属于哪里;因此,RDBMS的工作就更少了

虽然不确定,但我认为,这样的描述性查询有助于高效地生成和重用查询执行计划

由于你们的样品中并没有包含WHERE条款,我将不在这里详细说明。值得一提的是,参数化查询是更好的选择

衣冠楚楚 Dapper是O/R映射器。它将您传入的查询发送到RDBMS,而不做任何更改。真的吗?无论如何不同的话题。。。。从RDBMS接收结果后,它只需将RDBMS特定的数据结构映射到您的实体

有很多方法可以实现这种映射;有关详细信息,请搜索堆栈溢出。默认情况下,如果列/属性名和表/类名相同,则会自动执行此操作


因此,无论您选择*还是选定列,都与整洁无关。

因此,无论您选择*还是选定列,都与整洁无关。-是的,整洁无所谓。我想问题在于,如果您指定了列,那么维护C代码就会变得更加困难,因为每次表更改时,您都必须编辑列列表。另一方面,如果不指定列,则数据库必须计算出来,正如您所说的,描述得越多越好。因此,它们都有一个优点,即更具描述性的查询,而不是在列更改时易于维护。哪一个更重要?我只是试图用RDBMS和Dapper来回答。您现在提出的第三部分,可维护代码不是您问题的一部分。但是是的;你抓对了。这是基于您的特定用例的权衡。如果你想使用描述性查询和可维护代码,你可以考虑完整的ORM,比如NH或EF,它会为你生成这样的查询;但是……但是。。。很多但是`的;不同的话题。这是问题的一部分。我在问人们认为什么是最佳实践以及为什么,这并没有留下任何理由。我对这一点肯定有强烈的意见,但我遇到了一个持相反意见的人,所以我在寻找社区的想法,而没有给出我的所有理由。是的,谈论EF的弊病就是我们如何开始讨论的。