我是新手使用ORM处理数据库,目前我正在制作一个新项目,我必须决定是否使用Entity Framework或Dapper.我读了许多文章说Dapper比实体框架更快.
所以我使用Dapper创建了两个简单的原型项目,另一个使用Entity Framework和一个函数从一个表中获取所有行.表格架构如下图所示

以及两个项目的代码如下
对于Dapper项目
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
IEnumerable<Emp> emplist = cn.Query<Emp>(@"Select * From Employees");
sw.Stop();
MessageBox.Show(sw.ElapsedMilliseconds.ToString());
实体框架项目
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
IEnumerable<Employee> emplist = hrctx.Employees.ToList();
sw.Stop();
MessageBox.Show(sw.ElapsedMilliseconds.ToString());
经过多次尝试上面的代码只有我第一次运行项目时,dapper代码会更快,在这第一次之后我总是从实体框架项目中获得更好的结果我还尝试了以下关于实体框架项目的语句来阻止懒惰装载
hrctx.Configuration.LazyLoadingEnabled = false;
但是,除了第一次以外,EF的表现仍然相同.
虽然网上的所有文章都相反,但任何人都能给我解释或指导EF在这个样本中的速度更快
更新
我已经改变了实体样本中的代码行
IEnumerable<Employee> emplist = hrctx.Employees.AsNoTracking().ToList();
使用某些文章中提到的AsNoTracking会停止实体框架缓存,停止缓存后,dapper样本表现更好,(但不是很大的区别)
当我第一次打开使用wpf工具包日期选择器的窗口时,今天的日期在日历中突出显示,但相关文本框中没有任何内容(期望水印为mm/dd/yyy).
我想在用户选择日期并"提交"之后将日期选择重置为该初始状态,以便当他们再次使用它时,不是在他们之前选择的日期.因此,例如,如果一个人从现在起2个月后选择了一个日期,那么当它被重置时,文本框是mm/dd/yyyy水印,当日历打开时,它以今天的日期作为"开始日期"开始.
我尝试了以下各种组合,但这不会重置文本:
//set date to today so it move the calendar to this date
mydatepicker.SelectedDate = DateTime.Now;
//reset since we don't want a date selected
mydatepicker.SelectedDate = null;
//reset the text
mydatepicker.Text = string.Empty;
如果我仅重置文本,则不会重置日历(所选日期\开始).但是,如果我设置日历,文本会更新,而不仅仅是水印.
有任何想法吗?
谢谢