在EntityFramework中db.foo.Where和db.Database.SqlQuery有真正的区别吗?

本文关键字:db 区别 Database EntityFramework foo Where SqlQuery | 更新日期: 2023-09-27 17:49:46

以下两种方法之间是否存在真正的性能、质量或安全性差异?

方法1:

ViewBag.Foo= db.Words.Where(w => w.WordBaseID == 1 && w.LanguageID == lang).FirstOrDefault().Text;

方法2:

var query = "SELECT Text FROM Words WHERE WordBaseID = {0} AND LanguageID = {1}";
ViewBag.Foo= db.Database.SqlQuery<string>(query, 1, lang).FirstOrDefault();

在EntityFramework中db.foo.Where和db.Database.SqlQuery有真正的区别吗?

我认为在性能或安全性方面不会有什么不同。区别在于应用程序的维护。第二种方法是在代码中编写SQL查询,因此混合了c#和SQL,完全违背了ORM的目的。我的意思是,如果你要编写普通的SQL,考虑使用ADO。. NET ->将比ORM更快。

如果你的代码中有很多SQL查询,当你决定重命名一个表时,你将有很多地方需要修改,而如果你坚持使用经典的ORM工具,你只需要更新你的映射,让框架担心发出正确的SQL查询。编写本机SQL查询的另一个缺点是,您现在被绑定到特定的数据提供程序。请记住,并非所有数据库都支持所有SQL方法。ORM框架将考虑方言,…

将显示生成的SQL。

var result = db.Words.Where(w => w.WordBaseID == 1 && w.LanguageID == lang).FirstOrDefault().Text;
var sql = ((System.Data.Objects.ObjectQuery)result).ToTraceString();

,你可以比较差异