2014-09-01 80 views
1

我知道,我们现在可以(从EF5?)使用之间的实体框架的性能包括:(串),包括(X => x.myType)

var employees = Db.Employees.Include("Details").Include("Details.DetailsType")) 

,而不是

var employees = Db.Employees.Include(x => x.Details).Include(x => x.Details.Select(y => y.DetailsType)) 

随着调试,tho查询似乎是完全一样的,所以我想知道自己几个问题:

  • 这两种用法有什么区别?
  • 这两行之间的性能有差异吗?
  • 什么是最佳实践,我应该使用哪一个对应哪种情况?

谢谢您的回答;)

回答

1

是什么这两种用法的区别?

一个使用字符串,另一个不使用。所以如果该属性被重命名,另一个不会抛出编译错误。

这两行之间的性能有差别吗?

该字符串稍快于IIRC。减少反射查找来查找含义。我认为第二种形式动态获取字符串。

什么是最佳做法,哪一个我应该使用对应 哪种情况?

总是非字符串版本,因为第一部分描述的区别 - 如果您重命名该属性,则可以自动更正并找到该属性,而字符串形式不是这种情况。

实际上,当你考虑它时,其实很明显。以及 - 啊 - 记录。