ECO指南2

三、ECO的OR Mapping

1、ECO_TYPE:提供了每个业务逻辑类对应的独特类型ID

2、ECOMODELROOT:维护了每一个对象ID属于的类型ID

3、ECO_ID:下一个对象将要增加的对象ID

4、ECO_TABLES:ECO业务逻辑产生的模型数据表名的罗列。

5、ECO_ORMAPPING:只有一笔数据就是Mapping规则。

 

先从最基本的ECO类的元素字段说起:

Category作为一个类,含有三个元素。当选中一个元素,那么该元素有属性:

Comments大项:注释

Name:名称

Alias:别名

Has user code:

Type:该字段的类型。AutoInc代表自动增加的类型

Visible:代表是那种可见类型(public/private/protected/package)

也可以直接在该字段的字符串加以下符号修饰:

+  public

-         private

/  derived(下图中的TopicCount字段)

*  protected

Persistence大项:代表影射到数据库(称为持久化后)的选项。

Allow null:允许空么?

Delayed fetch:延迟获取?

Derivation OCL:派生属性的派生OCL表达示

Derived:派生属性么?如果是派生属性,需要在Derivation OCL填充内容。

Derived settable:需要将派生属性设置为表字段么?一般选FALSE。

Length

Save Action:保存的行为。Free/None/Dbassign,其中DBASSIGN代表由数据库来决定存储方式。比如前面的Type选择AUTOINC,那么就要选择这个DBASSIGN来设置该字段自动加一的属性。

 

 

 

 

 

 

 

 

介绍完了字段,那么我们看元素的构成物类:

Comments同前

General中:abstract:是抽象类么?

Alias:别名

Constains:对类中某些字段条件的限制,是个集合,可以写多个条件,可以由OCL撰写。比如对密码长度的限制等。

Interfaces:

Sealed:是否不可以被继承的?

Stereotype:

Locking 中:Generate Default:

Optimistic Locking:

 

 

四、基本操作:

4.1增加表的一条记录(实质:插入一个ECO对象,并且更新到数据库):

var

  objTopic : Topic;//是ECO空间的对象

  obj1:IobjectList;//用来转化IElement的对象列(Element as obj1 )

  obj:System.&Object;//取出对象列的首个作为操作对象

begin

try

  objTopic :=Topic.create(Ecospace);//rhRoot.Element.AsObject as Topic;  //创建ECO对象

  objTopic.ForumID:=1;

  objTopic.UserID:=1;

  objTopic.UserName:='wangzheng';

  objTopic.PostsNo:=1;

  objTopic.LastPosted:=Datetime.Now;

  objTopic.LastUserName:='yangtang';

  objTopic.LastUserID:=12;

  objTopic.LastMessageID:=1;

  objTopic.PostedTime:=Datetime.Now;

 

  ///用来获得一个关联的元素作为关系字段的填充

  /// 

  obj:=ForumHandle.Element.GetAsCollection.Item[0].asobject;

// ForumHandle为Forum.allInstances的数据集expressionhandle

  objTopic.postedAt:=obj as Forum;

 

  Ecospace.UpdateDatabase;

except  on E:Exception do

 

  MessageBox.Show('错误'+e.ToString);

end;

end;

 

4.2删除记录

对于数据库的一条记录,在eco中是视作一个对象的。在需要删除一条记录时,应先找到该对象,再进行删除 。 比如:person.AsIObject.delete 表示删除当前person记录如果是在一个名为ehperson的expressionHandle中,则可这样 
   ehperson.element.getascollection.removeat(recordno记录号),而不能象原来我们在delphi中做的用person.free或person:=nil来解决。因为这根本不对数据库进行操作。

范例

4.2.1  对一条记录删除

TopicHandle.Element.GetAsCollection.removeat(1);

ecospace.UpdateDatabase;

 

OR

//删除记录

          DataGrid SourceGrid = source as DataGrid;

          string Id = SourceGrid.DataKeys[e.Item.ItemIndex].ToString();

          IObject ToDelete = ObjectForId(Id);

          if (ToDelete!=null)

            ToDelete.Delete();

          UpdateDatabase();

          DataBind();

 

 

 

4.2.2对整个表的记录完全删除:

var list1:ielementcollection;

begin

...

  list1 := ehfx.element.GetAsCollection;
  for I := List1.Count - 1 downto 0 do
  begin
    afx := fxbb(list1.item[i].asobject);
    if assigned(afx) then
      afx.AsIObject.Delete;
  end;

  fecospace.UpdateDatabase;
  DataBind;

 

423 更新操作:

          其实直接的对一个ehandle直接赋值即可以用updatedatebase更新

           //更新操作

            DataGrid SourceGrid = source as DataGrid;

            string Id = SourceGrid.DataKeys[e.Item.ItemIndex].ToString();

            SourceGrid.DataBind(); // To set DataSource

            ElementHandle Eh = SourceGrid.DataSource as ElementHandle;

            Object Row = Eh.RenderElement(ObjectForId(Id));

            for (int colIndex = 0; colIndex< SourceGrid.Columns.Count;colIndex++)

            {

               if (!(SourceGrid.Columns[colIndex] is BoundColumn))

                 continue;

               BoundColumn Col = (BoundColumn)SourceGrid.Columns[colIndex];

               if (Col!=null && !Col.ReadOnly)

                  Eh.SetRenderedElementProperty(Row, Col.DataField, (e.Item.Cells[colIndex].Controls[0] as TextBox).Text, true);

            }

            UpdateDatabase();

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值