SqlSugar.ORM 语法比较简洁性能也很强大
/2表关联查询
var jList = db.Queryable<Student>()
.JoinTable<School>((s1, s2) => s1.sch_id == s2.id) //默认left join
.Where<School>((s1, s2) => s1.id == 1)
.Select("s1.*,s2.name as schName")
.ToDynamic();
/*等于同于
SELECT s1.*,s2.name as schName
FROM [Student] s1
LEFT JOIN [School] s2 ON s1.sch_id = s2.id
WHERE s1.id = 1 */
//2表关联查询并分页
var jList2 = db.Queryable<Student>()
.JoinTable<School>((s1, s2) => s1.sch_id == s2.id) //默认left join
//如果要用inner join这么写
//.JoinTable<School>((s1, s2) => s1.sch_id == s2.id ,JoinType.INNER)
.Where<School>((s1, s2) => s1.id > 1)
.OrderBy(s1 => s1.name)
.Skip(10)
.Take(20)
.Select("s1.*,s2.name as schName")
.ToDynamic();
//3表查询并分页
var jList3 = db.Queryable<Student>()
.JoinTable<School>((s1, s2) => s1.sch_id == s2.id) // left join School s2 on s1.id=s2.id
.JoinTable<School>((s1, s3) => s1.sch_id == s3.id) // left join School s3 on s1.id=s3.id
.Where<School>((s1, s2) => s1.id > 1) // where s1.id>1
.Where(s1 => s1.id > 0)
.OrderBy<School>((s1, s2) => s1.id) //order by s1.id 多个order可以 .oderBy().orderby 叠加
.Skip(10)
.Take(20)
.Select("s1.*,s2.name as schName,s3.name as schName2")//select目前只支持这种写法
.ToDynamic();
//上面的方式都是与第一张表join,第三张表想与第二张表join写法如下
List<V_Student> jList4 =
db.Queryable<Student>()
.JoinTable<School>((s1, s2) => s1.sch_id == s2.id) // left join School s2 on s1.id=s2.id
.JoinTable<School, Area>((s1, s2, a1) => a1.id == s2.AreaId)// left join Area a1 on a1.id=s2.AreaId 第三张表与第二张表关联
.JoinTable<Area, School>((s1, a1, s3) => a1.id == s3.AreaId)// left join School s3 on a1.id=s3.AreaId 第四第表第三张表关联
.JoinTable<School>((s1, s4) => s1.sch_id == s4.id) // left join School s2 on s1.id=s4.id
.Select<School, Area, V_Student>((s1, s2, a1) => new V_Student { id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name }).ToList();
Dapper ORM 性能也不错就是功能太少
using (var conn = new SqlConnection(ConnString))
{
conn.Open();
var r=conn.Execute(@"insert Person(username, password,age,registerDate,address) values (@a, @b,@c,@d,@e)",
new [] {
new { a = 1, b = 1, c = 1, d = DateTime.Now, e = 1 }
, new { a = 2, b = 2, c = 2, d = DateTime.Now, e = 2 }
, new { a = 3, b = 3, c = 3, d = DateTime.Now, e = 3 }
}
conn.Close();
}
Petapoco
PetaPoco可以自动转换:
var a = db.SingleOrDefault<article>("WHERE id=@0", 123);
转换为:
var a = db.SingleOrDefault<article>("SELECT col1, col2, col3 FROM articles WHERE id=@0", 123);
现在它也会处理这个问题:
var a = db.SingleOrDefault<article>("FROM whatever WHERE id=@0", 123);
只发现了这3个,还有没有好的推荐
SqlSugar.ORM ORM 就不错,我一直在用
不想折腾的就用EF,喜欢研究开源框架的就关注一下SqlSugar.ORM,该框架在开源社区比较活跃,支持目前的大多数主流数据库,而且功能在不断的更新,有兴趣的可以研究一下!!!

不是说其他orm框架不好,但跟ef基本都没有可比性。。。。
网上传说的各种orm,都是很好的满足了广大用户的常见需求,因而名噪天下,
而ef则是深藏不露的隐士高人一样,随便露两手,都很惊人,但没有人知道他的深浅。。。。。
2016-09-25的帖子。。。
我差点就正紧的回复了。。
https://github.com/2881099/FreeSql
这个好
EF,不二之选
可惜,社会上更多是不懂ef而滥用的人,反过来说ef不好的。。。。。

Dapper觉得挺好用的,EF每次更新数据表感觉比较麻烦啊,经常碰到一些返回的类型出错,跟实际的不匹配,不知道什么原因?
http://www.codeisbug.com 2019年了,用最好的ORM 不写SQL
https://blog.csdn.net/jiaweiok123/article/details/88681408
官方的有
ef
linq to sql
第三方我不推荐你了。各有不足,
我自己也有写的,13 年 nuget 上有发布。只是有BUG 几年 么有修复哈。不过不影响使用。
我觉得这些框架必然是牺牲一部分性能为前提的,无论EF还是其他。
没有人提ServiceStack吗,很全的一套,除了数据库这块还提供了redis支持。
你们为何还在挖。。。
我TM第三次回复这个帖子了,
跨度
3年
https://github.com/dotnetcore/FreeSql
单元测试数量4000+,github star 1500+,支持.net framework4.0+
支持 CodeFirst 迁移,哪怕使用 Access 数据库也支持;
支持 DbFirst 从数据库导入实体类,安装实体类生成工具;
支持 深入的类型映射,比如pgsql的数组类型;
支持 丰富的表达式函数,以及灵活的自定义解析;
支持 导航属性一对多、多对多贪婪加载,以及延时加载;
支持 读写分离、分表分库、过滤器、乐观锁、悲观锁;
支持 MySql/SqlServer/PostgreSQL/Oracle/Sqlite/达梦数据库/Access;
SOD框架,不仅仅是一个ORM框架,还有SQL-MAP功能。
https://github.com/znlgis/sod