以下两种方法之间是否存在真正的性能,质量或安全性差异?
方法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();
答案 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();
你可以比较差异。