0

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

方法一:

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

方法二:

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

2 回答 2

5

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

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

于 2012-12-29T16:04:23.690 回答
0

这将为您提供生成的 SQL。

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

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

你可以比较差异。

于 2012-12-29T16:05:33.697 回答