好的,所以我再次测试 EF 的性能,我只想从我的数据库中返回一个简单的结果。
例子
var jobsList = from j in mf.Jobs
where j.UserID == 1001 select new { Job = j };
不幸的是,这将我的用户对象加入了这个列表,我不希望 EF 这样做。我如何告诉EF不要仅仅因为有关系而加入。基本上我只想要该表中的一个简单行。
还是我需要使用不同类型的检索。我仍在使用下面的基本类型的数据库检索,我觉得现在有更好的方法来处理数据库工作。
SqlConnection myconnection = new SqlConnection();
编辑
基本上我在更清晰的背景下说的话。是不是只得到以下内容。
Job.JobID
Job.UserID
//Extra properties
我得到
Job.JobID
Job.UserID
Job.User
//Extra properties
该用户对象很容易消耗比需要更多的内存,而且我不需要它。
我的解决方案
所以我仍然不太相信EF,这就是原因。我关闭了 LazyLoading 并将其打开,并没有真正注意到那里的性能差异太大。然后,我将我的 SqlConnection 类型方法使用的数据量与我的 EF 方法进行了比较。
我得到了完全相同的结果集,这是性能差异。
对于我的实体框架方法,我会返回一份工作列表。
MyDataEntities mf = new MyDataEntities(); // 4MB for the connection...really?
mf.ContextOptions.LazyLoadingEnabled = false;
// 9MB for the list below
var test = from j in mf.Jobs
where j.UserID == 1031
select j;
foreach (Job job in test) {
Console.WriteLine(job.JobID);
}
对于执行存储过程并返回结果集的我的 SqlConnection 方法。
//356 KB for the connection and the EXACT same list.
List<MyCustomDataSource.Jobs> myJobs = MyCustomDataSource.Jobs.GetJobs(1031);
我完全理解 Entity Framework 比标准的 SqlConnection 做得更多,但是如果它要为结果集占用至少 25 倍的内存,为什么还要大肆宣传。只是似乎不值得。
毕竟,我的解决方案是不使用 EF。