(DevExpress2011 学习)XPO 学习之2 --数据记录增 删 改 与继承

4.       数据记录增

4.1     Delete Method 删除

如果持久性对象有删除延迟属性,Delete方法不会实际删除数据表里德记录. 代替的,它只是对该记录做了删除的标记,以后你可以使用Session.PurgeDeletedObjects删除. 或者你可以清楚这些删除标记,这些对象不会被清楚. 如果你要保持这种删除状态,使用Save方法保存对象.

如上例 : TitleType.Delete(); 

 

物理删除 清除所有被标记软删除的记录

Session.DefaultSession.PurgeDeleteObjects();

4.2      增加

private void BuildTable()
        {
            TitleType  myType = new TitleType(ComSession.DBSession); // ComSession.DBSession 是自定义的Session  

            myType.typeName = "类型名称";

            myType.Save();
        }

4.3     修改

TitleType myType = (TitleType)this.gridView1.GetRow(myrow); //找到对应行记录
myType.typeName = "被改的名称";
myType.Save()

5.       获取SQL 执行结果

Session.ExecuteQuery Session.ExecuteSproc方法返回它们执行的结果SelectedData对象实例. 这个数组中包含SelectStatementReslut对象,每个SelectStatementResult项包含相对的SELECT 选择命令执行的SQL Query结果或者是存储过程执行结果. SelectStatementResult 项目提供SelectStatementResult.Rows属性,它允许你去访问每个SeelctStatementResultRow对象的行结果. 每个SelectStatementResult对象有一个values属性,为访问每个不同列中的行结果提供值.

SelectedData sData = ComSession.DBSession.ExecuteQuery("select typeName,OID from TitleType");
 foreach (SelectStatementResultRow row in sData.ResultSet[0].Rows)
 Console.WriteLine(row.Values[0]);

6.        继承

XPO提供 2种通用的关系数据库继承映射解决方案

. 单表继承将所有表层次映射成单表

.类表继承映射每个类为它们的表

 

我们新建一个TitleType的父类   

public class TitleTypeFather : XPObject {

                   public TitleTypeFather() : base() {

                   }

                   public TitleTypeFather(Session session) : base(session) {
                   }

                   public override void AfterConstruction() {
                            base.AfterConstruction();
                            // Place here your initialization code.
                   }

        string _testmemo;
        [Size(50), NullValue("123")]
        public string TestMemo
        {
           set
            { SetPropertyValue<string>("TestMemo"ref _testmemo, value);            }
            get

           { return _testmemo; }
        }
     }

 

然后将原来的TitleType类改动一下如下


[MapInheritance(MapInheritanceType.ParentTable)]
  public class TitleType : TitleTypeFather {
        string _typeName;
        [Size(50)]
        public string typeName
        {
            set
            { SetPropertyValue<string>("typeName"ref _typeName, value); }
            get
            {   return _typeName;                }
        }

        string _memo;
        [Size(50),NullValue("123")]
        public string Memo
        {
            set
            { SetPropertyValue<string>("Memo"ref _memo, value); }
            get
            { return _memo; }
        }
        [Persistent ]
        DateTime _DateTime;
        public DateTime date
        {
            get {
                _DateTime = DateTime.Now;
                return _DateTime;
            }
        }

     public TitleType() : base() {
                   }

     public TitleType(Session session)
            : base(session)
        {
         }

          base.AfterConstruction();
        // Place here your initialization code.
     }
}

在实际操作中,只要你引用了TitleTypeFather,它自动将子类的属性当自己的属性直接使用

看看数据库中TitleTypeFather实际表结构为
 

posted @ 2011-11-14 21:06  meetweb  阅读(4209)  评论(0编辑  收藏  举报