Chloe.ORM:一款高质量的.Net C#数据库访问框架(ORM)。支持SqlServer、MySql、Oracle及SQLite,实体为纯POCO,支持基本数据类映射的同时也支持枚举类型。查询接口借鉴linq,支持lambda表达式,高效便捷开发。借助lambda表达式,完全用面向对象的方式就能轻松执行多表连接查询、分组查询、聚合查询、插入数据、批量删除和更新满足条件的数据等操作,开发容错率极高。
更新内容:
增加更易用的多表连接查询接口 DbContext.JoinQuery
修改连续调用 Skip 方法时生成错误的 sql 语句 bug,如 IQuery.Skip(10).Skip(5)
引用来自“eechen”的评论
查询指定标签下的文章,并按post_id降序排序(自增编号post_id反映了post的创建时间):$sql = '
SELECT post.id, post.title
FROM post_tag, post
WHERE post_tag.post_id = post.id
AND post_tag.tag_id = 1
ORDER BY post_tag.post_id DESC
LIMIT 20 OFFSET 0
';
$rows = $db->query($sql)->fetchAll();
好奇ORM是怎么简化SQL多表连接的,是否能够结合上面这个很常见的多表逻辑来说明.
另外,数据量大时,多表连接的开销很大,ORM是否应该提供一种外部(如Redis)的缓存机制来优化查询.
比如:标签1下的文章的第1页
key: tag_1_posts
value: list(post_1, post_2)
Redis可以用lrange操作list实现分页.
{
JoinType.InnerJoin, post_tag.post_id = post.id && post_tag.tag_id = 1
})
.Select((post_tag,post) => new { post_tag,post })
.OrderbyDesc(a=>a.post_tag.post_id )
.TakePage(1,20)
引用来自“eechen”的评论
查询指定标签下的文章,并按post_id降序排序(自增编号post_id反映了post的创建时间):$sql = '
SELECT post.id, post.title
FROM post_tag, post
WHERE post_tag.post_id = post.id
AND post_tag.tag_id = 1
ORDER BY post_tag.post_id DESC
LIMIT 20 OFFSET 0
';
$rows = $db->query($sql)->fetchAll();
好奇ORM是怎么简化SQL多表连接的,是否能够结合上面这个很常见的多表逻辑来说明.
另外,数据量大时,多表连接的开销很大,ORM是否应该提供一种外部(如Redis)的缓存机制来优化查询.
比如:标签1下的文章的第1页
key: tag_1_posts
value: list(post_1, post_2)
Redis可以用lrange操作list实现分页.
$sql = '
SELECT post.id, post.title
FROM post_tag, post
WHERE post_tag.post_id = post.id
AND post_tag.tag_id = 1
ORDER BY post_tag.post_id DESC
LIMIT 20 OFFSET 0
';
$rows = $db->query($sql)->fetchAll();
好奇ORM是怎么简化SQL多表连接的,是否能够结合上面这个很常见的多表逻辑来说明.
另外,数据量大时,多表连接的开销很大,ORM是否应该提供一种外部(如Redis)的缓存机制来优化查询.
比如:标签1下的文章的第1页
key: tag_1_posts
value: list(post_1, post_2)
Redis可以用lrange操作list实现分页.