首页 新闻 赞助 找找看

.net core ORM一对多查询

0
悬赏园豆:10 [已解决问题] 解决于 2022-09-13 08:48
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时请求数据库吧

复制粘贴机器人的主页 复制粘贴机器人 | 小虾三级 | 园豆:623
提问于:2022-09-08 14:50
< >
分享
最佳答案
0

没有期望的答案, 我的需求是除了EF以外 其他ORM的例子

复制粘贴机器人 | 小虾三级 |园豆:623 | 2022-09-13 08:48
其他回答(3)
0

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();
收获园豆:2
diudiu1 | 园豆:1031 (小虾三级) | 2022-09-08 16:29

阿哲 我是想了解用其他ORM怎么写。。。

支持(0) 反对(0) 复制粘贴机器人 | 园豆:623 (小虾三级) | 2022-09-08 16:31
0

用dapper只能就是直接写SQL。
用dapper也可以用事务,百度一下就知道了

t = con.BeginXXX();
try{
    con.exe("your sql")
    t.Commit()
}catch(){
    t.RollBack()
}
收获园豆:4
会长 | 园豆:12401 (专家六级) | 2022-09-08 16:30

好的,只是感觉原先一个SaveChanges能解决的,要变成这好几句。所以就来问问是不是有别的什么方法做的。
这个一对多的查询是不是我想的那样 用join的sql查询,在关系上是一对多,但实体结构上一对一(不使用导航属性),然后在业务代码里通过group by之类方法 把一对一的结构处理成一对多结构的实体

支持(0) 反对(0) 复制粘贴机器人 | 园豆:623 (小虾三级) | 2022-09-08 16:40
0

发现很多人还是对与数据库交互有种根深蒂固的思维,认为请求次数越少越好。
其实,大多数场景下,让数据库回归到存存储/查询数据的本质上来最好,不要把业务逻辑下放在数据库中去。
是的,这样做性能比较高,节约网络资源,但现在大多数场景场景下,应用和数据库之间都是内网环境,千兆网卡, 不差这点儿流量。所以,现在应用开发中推荐尽量用单表查询,少用或不用join之类的联表语句。

这和吃自助餐推荐少拿多取一个道理,一上来就拿一堆是陋习,是自私和没素质的表现,而且也更容易铺张浪费。

收获园豆:4
Adming | 园豆:119 (初学一级) | 2022-09-09 10:48

这个理解,但是我觉得 join可以不写 但要会用,所以我想了解其他orm怎么写的

支持(0) 反对(0) 复制粘贴机器人 | 园豆:623 (小虾三级) | 2022-09-09 11:20

@复制粘贴机器人: 每种orm都不一样,具体的看orm文档相关写法就行了,不需要记这个。搞懂技术原理和本质就行了,这写花里胡哨的写法没必要刻意去记,用到时查文档就能找到。

这种查询,只需要搞清楚SQL语句怎么写就行了,无非就是SQL Join分组或用子查询,万变不离其宗。

支持(0) 反对(0) Adming | 园豆:119 (初学一级) | 2022-09-09 11:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册