日期:2014-05-17  浏览次数:20756 次

关于强类型DataSet
2个问题:


1:传说中的Linq To DataSet是不是针对强类型DataSet用的?如果是的话,那可是专门的一本书哦
2:强类型的那几个优点,我也知道了,不过,感觉内容还是挺多的,我就用非类型化的DataSet行不啊?不想学了,你们呢?

------解决方案--------------------
问题1,不清楚也不想知道,你只要知道Linq To Entry和Linq To XML即可,其它的都不必管,Linq To DataSet基本没人用,Linq To SQL功能不好。

问题2,强类型DataSet没必要用也不推荐用,本来DataSet就已经很庞大了,再强类型化后,提及成倍增长;本来DataSet限制就很多了,动不动就提示某列不允许空或某列为只读的(提示还是英文的,不友善),如果用了强类型DataSet,更不方便使用。虽然验证数据有效性是必须的,但是验证的结果必须给出很友善的提示,这在DataSet中做不到,总给最基本的,只能程序员看得懂的提示信息,那么这种验证不如不要,我后期手动验证数据并给友善提示更好。但是DataSet里要去掉数据验证是不可能的。如果喜欢实体类,那就干脆别用DataSet,因为实体类完全可以替代DataSet,且数据验证也可以自定义(实体类本身无验证,速度快)。如果图方便,用DataSet(其实更多的是用DataTable),那么就方便到底,用弱类型的。
强类型的DataSet是为模仿实体类的优势而提高的折衷方案,却不是好方案,所以不学也罢。另外强类型DataSet再我初步尝试下,很快就发现了一个致命的BUG —— 不支持可空类型,对于可空类型如 int? 等类型,它只能处理为int ,并在为空时报错或给出默认值0,显然都不符合要求。

说了这么多强类型DataSet的不足,如果你还觉得它好,那我就不管了。
------解决方案--------------------
问题1,linq和强类型dataset没有关系,

问题2,我经常用强类型dataset,因为这东西很方便,用vs工具可以直接从数据库生成强类型dataset,字段可以直接映射到类的属性,不用做类型转换,这样可以免除大量的代码,其实很方便,可以让你少写很多烦人的Convert.ToXXX之类的代码,

可空类型是支持的,vs会自动生成IsNullXXXX属性来判断是否为空,如果空你还去访问,就会抛出异常,所以抓异常也可以,不过麻烦,

一个显而易见的好处就是,用强类型dataset,可以让你写数据库代码的时候,节省差不多一半的时间,而且可以图形化编辑sql语句,

------解决方案--------------------
我用了很多,感觉强类型DataSet的不足只有一个,就是在数据库表字段发生变化的时候,更新强类型DataSet有时候会有点麻烦,如果是vs完全自己生成的就不会有问题,但如果你改过一些映射的地方,都要重新改,不过即使如此,使用强类型DataSet也会大量节省写数据库代码的时间,
------解决方案--------------------
我也是只看Linq To Entry和Linq To XML。
用起来优雅而方便。