有兩張表 F、P
F表字段有 id,nm
P表字段有 id,ds,fi (其中 fi 對應表 F 的 id)我現在想得到這樣一個結果,用Sql是這樣寫
select P.id,
       P.ds,
       P.fi,
       F.nm
from P left join F on P.fi=F.id我做了個例子用“繼承”來實現,不知道是否合理一、先寫兩個Model,對應上面的兩個表
class F
    {
        public F()
        { }        public F(SqlDataReader reader)
        {
            _id=reader ["id"].ToString();
            _nm = reader["nm"].ToString(); ;
 
        }        private string _id;
        private string _nm;
        /// <summary>
        /// 
        /// </summary>
        public string id
        {
            get { return _id; }
        }
        /// <summary>
        /// 
        /// </summary>
        public string nm
        {
            get { return _nm; }
        }    }public class P
    {
        public P()
        { }        public P(SqlDataReader reader)
        {
            _id = reader["id"].ToString();
            _ds = reader["ds"].ToString();
            _fi = reader["fi"].ToString();
        }        private string _id;
        private string _ds;
        private string _fi;
        /// <summary>
        /// 
        /// </summary>
        public string id
        {
            get { return _id; }
        }
        /// <summary>
        /// 
        /// </summary>
        public string ds
        {
            get { return _ds; }
        }
        /// <summary>
        /// 
        /// </summary>
        public string fi
        {
            get { return _fi; }
        }
    }
二、然後寫一個子類P2,繼承自 P
public class P2 : P
    {      
        public P2(SqlDataReader reader)
            : base(reader)
        {
            F f = FL.GetOne(base.fi);//獲取關聯表F的信息
            _nm = f.nm;
        }                private string _nm;        public string nm
        {
            get
            {
                return _nm;
            }
        }
    }我想問的是,這樣寫P2,是否合理?非常感謝!

解决方案 »

  1.   

    我觉得你的model不太好,model的构造函数用SqlDataReader,不好,直接用参数比较清晰一些,而且reader要是为空怎么办?我觉得这个也没有必要用继承,如果这个主外键关系要用到继承来搞,表多了就很麻烦的!你可以写一个放logic的model去放p2,个人看法,呵呵!
      

  2.   

    不要这样写,看你写的是实体类,2.0中可以使用外键实体,3.0以上可以使用LINQclass P   
    {
         //属性与访问器
    }class F
    {
         //表中的属性与访问器
          private P _p; 
         public P MyP
         {
            get{return this._p;}
            set{this._p=value;}
         
    }
      

  3.   


    直接用参数比较清晰一些直接用參數的構造函數我寫了,隻是沒貼上來而已每一表Model有三個構造函數public P()
            { }public P(string id)
            {-id=id;}public P(SqlDataReader reader)
            {           
            }