在EntityFramework中db.foo.Where和db.Database.SqlQuery之间是否存在真正的区别?

时间:2012-12-29 15:58:54

标签: c# entity-framework

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

方法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();

2 个答案:

答案 0 :(得分:5)

我认为性能或安全性不会有所不同。不同之处在于维护您的应用程序。使用第二种方法,您将在代码中编写SQL查询 - &gt;从而混合了C#和SQL,完全违背了ORM的目的。我的意思是如果你要编写纯SQL,请考虑使用ADO.NET - &gt;它会比ORM更快。

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

答案 1 :(得分:0)

这将为您提供生成的SQL。

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

var sql = ((System.Data.Objects.ObjectQuery)result).ToTraceString();

你可以比较差异。

相关问题