class ADto
{
int id;
List<BDto> BDtoList;
}
class BDto
{
int id;
}
from a in tableA
let b = tableB.Where(x => x.aid == a.id).ToList()
select new ADto
{
id = a.id
BDtoList = b.Select(y => new BDto() { id = y.id }).ToList()
}
不用EFCore的话该怎么写这个一对多的查询 有没有其他orm的例子 比如dapper 或者sqlsugar。
先join 再group by?
EF的SaveChanges是事务性的, 那如果替换别的orm的时候,原先一次SaveChanges多个增删改的都要换成事务?
还有个问题,我记得EF的修改只在SaveChanges才去执行,相当于只会请求数据库1次;
如果用dapper做多次修改的话,就算是用事务也会在每次Execute时请求数据库吧
没有期望的答案, 我的需求是除了EF以外 其他ORM的例子
var query1 = from b in dbContext.Blog
select new
{
Id = b.Id,
Title = b.Title,
Items = dbContext.BlogItem.Where(a => a.BlogId == b.Id).ToList()
};
var list = await query1.ToListAsync();
阿哲 我是想了解用其他ORM怎么写。。。
用dapper只能就是直接写SQL。
用dapper也可以用事务,百度一下就知道了
t = con.BeginXXX();
try{
con.exe("your sql")
t.Commit()
}catch(){
t.RollBack()
}
好的,只是感觉原先一个SaveChanges能解决的,要变成这好几句。所以就来问问是不是有别的什么方法做的。
这个一对多的查询是不是我想的那样 用join的sql查询,在关系上是一对多,但实体结构上一对一(不使用导航属性),然后在业务代码里通过group by之类方法 把一对一的结构处理成一对多结构的实体
发现很多人还是对与数据库交互有种根深蒂固的思维,认为请求次数越少越好。
其实,大多数场景下,让数据库回归到存存储/查询数据的本质上来最好,不要把业务逻辑下放在数据库中去。
是的,这样做性能比较高,节约网络资源,但现在大多数场景场景下,应用和数据库之间都是内网环境,千兆网卡, 不差这点儿流量。所以,现在应用开发中推荐尽量用单表查询,少用或不用join之类的联表语句。
这和吃自助餐推荐少拿多取一个道理,一上来就拿一堆是陋习,是自私和没素质的表现,而且也更容易铺张浪费。
这个理解,但是我觉得 join可以不写 但要会用,所以我想了解其他orm怎么写的
@复制粘贴机器人: 每种orm都不一样,具体的看orm文档相关写法就行了,不需要记这个。搞懂技术原理和本质就行了,这写花里胡哨的写法没必要刻意去记,用到时查文档就能找到。
这种查询,只需要搞清楚SQL语句怎么写就行了,无非就是SQL Join分组或用子查询,万变不离其宗。