三层架构中多表查询是返回实体好还是集合好? 这个问题一直困扰着我,拿不定主意。
如果是单表的话 实体类是不错的  遇到多表的话难不成再建一个多表的实体类? 少个字段多个字段那岂不是要创建多个差不多的实体??  这样做很显然太死板了
有些朋友就想到如果是多表查询  那就返回数据集(Dataset),这也许是大家比较认同的办法吧,可是又感觉使用了弱类型的数据集不那么的OO  
恩,为了解决这个问题  那就还是用实体类吧   在数据库里创建个视图  按照视图来创建实体类(这里有可能说的不妥,一般是先建数据模型最后才生成数据库,申明下呵呵)  这样做应该也还不错所以想问问大家的意见  一般大家是怎么做的呢??  求大虾指教
纠结的我头发都白了  

解决方案 »

  1.   

    dataset用的比较多吧.有时候为了方便也会新建实体类.
      

  2.   

    只是显示用DataSet就可以了......
      

  3.   

    对于小的东西 一般用dataset,
    反之用实体类 。
     我们公司的项目一直用的实体类 对于楼主说的 多表查询 一般是通过关联多次查询的 虽然查询效率没dataset好 单感觉维护更好
      

  4.   

    设计业务逻辑的时候不涉及数据库,自然就用不到datatable之类的东西
      

  5.   

    我看楼主在问三层,问orm,那就是在学新的开发模式了,原来的dataset是弱类型,都是围绕数据库编程的,既然你要分层,那么你现在的思考方式就要变了,不能盯着数据库的多表查询,三层没有这个概念,三层的实体是先于数据库设计的,你需要什么实体就先定义什么实体,数据库访问层去迎合实体,而不是实体去迎合数据库的多表查询。现在的orm很多都是先设计数据库,然后用工具映射自动生成实体,这不是正统的方法,EF的Code First模式才是未来。
      

  6.   

    我和楼主有同感,我现在是多表的时候就用Datatable因为没有定义实体,不过上面有种思想感觉不错,没有实际做过,不好说,希望楼主搞定了也给我说一下,谢谢
      

  7.   

    增,删,改和简单的查询用ORM。
    其他的复杂查询用DataTable
    没必要全部追求ORM
    如果你全部追求ORM,给你个需求:行转列要查询出数据来,你怎么做?ORM遇到问题了。DataTable 可以解决问题
      

  8.   


    这个估计是说错了。
    小点的项目(10W以下)。你用实体类差不多。
    大点的项目(40w以上)怎么也得有个自定义查询,动态SQL哪个大点项目没有。
    大点的项目。查询至少关联三四个表。一更新也至少几个表。三层几乎没有啥用。
      

  9.   

    的确是麻烦啊   fengyarongaa兄说的动态数据库是指什么   ORM?
      

  10.   

    建议对Linq和ORM做一定的了解,用实体类也一样实现复杂的关系,再复杂的SQL操作,后台代码里面都可以不出现SQL语句。楼主如果没见过这类架构,可以看看新版本的Petshop5.0的架构,然后根据实际情况做一个选择。
      

  11.   

    一直使用的实体类属性和DataTable来显示数据库
      

  12.   

    这么说吧要是小数据量并且单条的话dataset和实体类都可以 ,但是实体类比较容易维护好理解看起来清晰。
    但是实体类不能够批次多条的像底层传输数据。
    所以在大数据多条的时候可以用强类型的dataset
      

  13.   

    oo绝对不是唯一的真理,
    很多情况要反oo设计,
      

  14.   

    正解,
      有几个表,
    就在lisT<实体>  l 里add 几个 [实体]了。
      

  15.   

    如果你说的是多表关联查询,--就是说得到的是一个无可意料的 混合表。
      (而不止是一张表,而是多表(可能10张),而且也不确定有张表。)
    要建这样的实体可不容易。
      但是我们要的是数据:
      且并不是要实体。
    所以用 table 这类数据结构了, 来存放最好不过了, 比如 DataSet
      要么自已定义一个动态表格类。 可以继承于DataSet ,
      并增加一些你要的功能。
      

  16.   

    只读的话就返回sqldatareader,有更新需要的话,就用datatable,或者dataset .
      

  17.   

    莎士比亚说过:“选择实体类还是dataset这是个问题”。曾经有资料介绍dataset功能强大但占用资源较多一般有datatable
      

  18.   

    大多数情况下毫不犹豫 直接DataSet    除开一些特殊情况,看此模块使用的频率如何 一般3次以上就考虑建实体了。  
      

  19.   

    实体集合二次筛选也很麻烦,即使有linq,但linq的效率,
      

  20.   

    个人觉得,对于那些纯粹是为了展示的查询,就返回datatable或者datareader就足够了,
    不需要映射到实体,比如一些报表展示。映射到实体有个问题,就是稍微有点变化,都要修改实体,比如报表加一列,报表减一列之类的。但对于一些涉及编辑、多功能的地方,最好返回实体集合。
    但这个还有一个问题,就是得象java一样建立一个数据处理中心,
    否则,返回实体实际没有任何意义。
    对象的好处在于永远只有一份,无论做多少筛选操作编辑查询,永远只有一份。
    不象datatable,datareader,会复制很多份。
      

  21.   

    to ktei2008 
    其实在管理中,你这样的观点我是非常的反对的。总有自己的观点吧。哲学害死人。在实际中,做外包的用datatable这种弱类型的开发快,不涉及到太多维护的话。在我刚毕业出来基本上通过客户验收就没有多少维护了.这样的项目用实体类那相当麻烦,得不偿失。
    如果你的项目涉及到长期运营维护,最好还是花多点时间用一些框架或者自己写,用实体类(强类型)这样维护的成本小,也可以为以后升级减少一些麻烦。