比如说我有个方法 public User GetUserById(string id)根据ID返回一个这样的实体
我可以这样写吗?public DataSet GetUserById(string id)?
感觉要返回个用户实体类很麻烦啊,假如这个类有很多属性的话,要让前台得到要再方法里一一写出来。。

解决方案 »

  1.   

    (1)可以
    (2)实体类往往可以用ORM框架或者代码生成器产生,不存在你说的麻烦。
      

  2.   

    DataSet的问题:  
    缺少抽象
    弱类型  
    实体类定义行为,强类型
    如LINQ,ORM
      

  3.   

    可以
    不过最后要返回一个Dataset数据集
      

  4.   

    用实体类,等你了解了,才知道真正的好处
    使用代码生成器,完全一点都不麻烦,如果只返回一个表数据,DATATABLE即可,DATAREADER某些情况下更好
      

  5.   

    DataSet/DataTable的问题是升级.Net版本之后序列化出来的XML会变化。比如http://support.microsoft.com/kb/914460这个bug
      

  6.   

    支持10楼的说法。实体类是做什么用的?User 这一类型 的 实体类 是为了实现复杂的业务逻辑的,而你支持提取数据、显示数据,根本就没有什么业务逻辑需要处理。那么还要专门定义一个实体类,那不是给自己找罪受吗?而DataSet这一类型的就是装载数据、传递数据的。如果没有什么业务逻辑的话,那么正是DataSet的用武之地。另外可以直接使用DataTable的。
      

  7.   

    那么有1000个数据集,你是不是要设计1000个实体啊怎么会这样?
    程序没有什么业务逻辑是典型情况么?OO/ORM和Data/Bind是两种风格,无所谓好坏,只有适用性。如果说将这两者凑在一起有问题的话,并不能否定这两者之一。
      

  8.   

    而DataSet这一类型的就是装载数据、传递数据的。如果没有什么业务逻辑的话,那么正是DataSet的用武之地ds中的数据时零散的  比如有十个数据需要显示 就会出向 ImgProlist = ds.Tables["Tb_Goods"].Rows[0][6].ToString();有谁知道 Rows[0][6].代表哪个字段 这个不太符合编码规范 如果能用实体类的话可以避免这个问题 直接Model.属性
      

  9.   


    1、难道不能这样写吗:Rows[0]["UserId"];2、也能利用for(each)或LINQ自动匹配,那么连字段都不用写了,
    你定义一个Property,它的DataField="UserId",很简单就能让数据集自动匹配实体属性了;3、其实所有实体的"属性"的是对象,而不是值,值只是对象的一个属性Value,理解这一点,你就会发现你根本不需要知道那个字段Rows[0][6]是什么了。
      

  10.   

    可以这样写,但是不符合3层分离的原则。1.数据库修改了字段名,或者更换了其他类型的数据库存放。返回User的写法只需要修改DAL层代码即可,而返回DataSet的,需要搜索所有使用这个方法的代码,人工检查修改的内容是否正常,一旦漏过,就有报错的可能。2.返回DataSet需要在前台时时刻刻记住字段名,而User则可以采用一些可读性更好的属性名来封装字段名。3.不想手写Domain层的内容,可以考虑代码生成器,网上一堆堆的,就算自己写个也不费劲的。
      

  11.   

    可以,另外有种DataSet叫强类型的DataSet,楼主可以考虑一下。不过为啥原来的实体不行么?