首页 新闻 搜索 专区 学院

项目中使用linq遇到的极其恶心的问题

1
悬赏园豆:100 [已解决问题] 解决于 2011-11-30 17:27

最近做项目使用linq,发现它有些非常恶心的缺陷,也许它有解决办法,反正我在网上查不到解决方案,请高手帮忙看看能不能解决。

恶心点1:随意命名外键关系

一个表有两个外键,两个外键都指向同一个表,于是,该表生成的类具有两个外键对象,好了,linq开始了它非常恶心的命名,直接就是一个命名为“外键表名”,一个命名为“外键表名1”,调用的时候由于没有注释,我根本不知道哪个对应哪个外键。

当然,这个可以自己配置命名,但会带来更恶心的问题,由于linq没有同步数据库表的选项,当数据库表更改后,我不得不全部重新拖一遍,又不得不重新一个个去命名,极其恶心。

恶心点2:读取外键属性时不能实行延迟转换sql语句。

如一个表A有一个外键,当然它会生成一个外键对象B,当我得到一个A对象后,我想计算对象A中包含多少个对象B,最简单的方式就是A.B.Count,但令我想不到的是,居然linq生成的语句不是Count,而是将全部B都读进了内存。于是我又换用A.B.Count(),问题依旧,效率极低。

当然还有无注释的问题,虽然可以自己添加,一变动表结构重新拖一次全部消失。

陌客的主页 陌客 | 初学一级 | 园豆:52
提问于:2011-11-29 11:50
< >
分享
最佳答案
0

不会用LINQ而已,以前我也是这样,现在才知道我以前多么无知。

做法很简单,你不应该重新拖,而是在类上设置映射关系,这很简单的。

如果你要写注释,建议写在分布类里,写在desinger.cs里只能说明你自己不看代码生成文件的注释,是自己傻

收获园豆:100
bidaas | 初学一级 |园豆:124 | 2011-11-30 11:01
其他回答(4)
0

你这是发表博文还是提问题啊?

悟行 | 园豆:12422 (专家六级) | 2011-11-29 12:46

问题,求解决办法

支持(0) 反对(0) 陌客 | 园豆:52 (初学一级) | 2011-11-29 12:49
0

你用的方式不对吧。

延迟加载和linq没有直接的关系吧。你是用EF吧。

Repository | 园豆:610 (小虾三级) | 2011-11-29 13:06
0

你说的都不是LINQ的问题

artwl | 园豆:16536 (专家六级) | 2011-11-29 14:46
1

A.B.Count()

这个好象是这样的,会全读。不过,对于IQueryable执行count()是会转为select count(*) from...的。

----

一个表有两个外键,两个外键都指向同一个表,于是,该表生成的类具有两个外键对象,好了,linq开始了它非常恶心的命名,直接就是一个命名为“外键表名”,一个命名为“外键表名1”,调用的时候由于没有注释,我根本不知道哪个对应哪个外键

===================

这个好象是子表的名字吧,子表名字不会相同,可以区分啊。如果是同一个表指向外键指向自已,则叫作比如Menu1,Menu2 一个代表父,一个代表子。确实有你说的问题 。

 

当然还有无注释的问题,虽然可以自己添加,一变动表结构重新拖一次全部消失。

==============

注释可以写在后面的分部类的cs文件中。刚好在分部类中作一些初始化工作,也不觉不可。不是那个designer.cs中

tp3cd | 园豆:409 (菜鸟二级) | 2011-11-29 15:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册