重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
EF
创新互联建站基于成都重庆香港及美国等地区分布式IDC机房数据中心构建的电信大带宽,联通大带宽,移动大带宽,多线BGP大带宽租用,是为众多客户提供专业服务器托管报价,主机托管价格性价比高,为金融证券行业光华机房服务器托管,ai人工智能服务器托管提供bgp线路100M独享,G口带宽及机柜租用的专业成都idc公司。
model
first方式,
你的DB是继承ObjectContext
using (MyObjectContext db = new MyObjectContext() )
{
string sql = “ select columnA, columnB from TableA where 1 = 1 ”;
db.ExecuteStoreQuery
(sql).ToList();//TableAObject就是你定义的对象,对象属性就是columnA, columnB
} code
first,
你的db是继承DbContext
using (MyDbContext db = new MyDbContext() )
{
string sql = “ select columnA, columnB from TableA where 1 = 1 ”;
db.TableAObject.SqlQuery(sql).ToList();//TableAObject就是在MyDbContext 定义的对象
}
这里只是列举查询的方式,仅供参考,一般新增
删除
或者修改
用对象的方式比较多,如果是sql,一般是
db.Database.ExecuteSqlCommand(sqlString)
using (MyObjectContext db = new MyObjectContext() ){ string sql = “ select columnA, columnB from TableA where 1 = 1 ”; db.ExecuteStoreQueryTableAObject(sql).ToList();//TableAObject就是你定义的对象,对象属性就是columnA, columnB}
性能上,自然是ef要低些。这是毫无疑问的。but,你觉得这点性能损耗和带来的方便快捷那个更重要,就像二八原则
我不是大神,但是你这个问题我有点思路,从MSDN()上可以看到影响EF性能的因素
第二种很快是因为dbcontext没有追踪你执行查询的结果(dbconext.Database.SqlQueryint("select count(*) from table")),你对这个结果附加where条件是不会加到EF生成的SQL语句上的
所以对于第一种情况,你可以使用NoTracking(dbconext.table.AsNoTracking().Count())来取消EF对结果的追踪
具体的区别你可以参考:
和: