最近看PetShop 对于他的数据访问层有些疑惑
它用各个类来对应表做数据载体
通过数据操作的对象对应操作 这些类的实例
可是它似乎太简单了  都是一一对应的 
如果遇到复杂情况 怎么设计
比如有两个表 A ,B  A中储存用户信息 有一个字段是用户类型 对应B表中一条数据
如果我要查询用户的信息 这些信息一部分来自A 一部分来自B 

解决方案 »

  1.   

    类不是可以继承的吗,一个表一个类是最基本的方法. 因为修改删除不可能在一个SQL里修改两个表,至于查询,就要灵活对待啰.
      

  2.   

    看来用存储过程或触发器比较好
    数据载体设计成一个好 还是两个?
    设计的时候是以 显示为准 还是以表为准?
    To:9楼
    你的意思是A继承B,还是一个C继承A,B 可是类不能继承多个类
      

  3.   

    在Linq中,这种设计方式就会被设计成两个类。但外键会让A中的这个类产生一个Entity成员,指向一个B类的对象。即外键索引的对象。
    我也倾向于这种设计方法。这种设计方法在实现数据库表格的“对象”的时候能够更好的理解成员之间的关系。
      

  4.   

    class A
    {
    }class B
    {
        private A a;
    }
      

  5.   

    做东西不要那么死,要灵活点。不一定非得是一个对象对应一个表,只能操作一个表里面的内容,你可以灵活点,一个对象可以操作或提取多个表里的数据。比如说:人员信息被设计为存放在A,B,C三张表中,业务对象新增一个人员信息,你会忍受业务对象要分别调用数据访问层里的三个对象,每个对象插入一部分内容才能完成新增一个人员信息的方式吗?这里,你只需将这三张表封装进一个数据访问对象,比如ABC就行了,由这个对象负责去分别更新这三个表的内容。这样,业务对象与后台数据库就能较好的分离。
    所以,一切东西还是要活学学用,看实际情况,只要把握住大的方向就行了
      

  6.   

    这种数据的组合查询一般可以放到存储过程中解决,很多东西可以灵活处理的,要根据自己的项目决定,
    petshop只是一个参考,并不是典范
      

  7.   

    17楼说得很是
    最后想问以下 看过PetShop的朋友
    它那样创建每个对象都执行一次查询 
    会不会有效率问题
    为什么这么设计 怎么不一个查询循环创建
    谢谢17楼 12:00结贴
      

  8.   

    虽然没看过petshop
    但也熟悉一些框架,比如CastleActiveRecord我想你还没有深入看petshop
    关于框架中的数据库操作model都有一下几种形式
    一对一
    一对多
    多对多
    比如:
    ModelA
    {
      aid;
      bid;//此id是外key
      name;
      ModelB modelb; //此句是所谓的一对一 将ModelB对应的数据表关联起来
      IList modebs;//此句IList存放许多ModelB对象,是所谓的一对多关系
    }ModelB
    {
      bid;
      name;
    }
      

  9.   

    http://terrylee.cnblogs.com/archive/2006/04/06/368471.html
    看看这个应该就很明白了
      

  10.   

    谢谢楼上了 
    CSDN怎么还不到5天不让结贴加分
    谢谢了
      

  11.   

    看一下关于Linq中关于DataContext部分的内容,其中人一个sqlmetal可以自动生成一些类框架。