ITPub博客

首页 > 应用开发 > IT综合 > 实践ORM,创建基于Grove的.NET应用程序(三) (转)

实践ORM,创建基于Grove的.NET应用程序(三) (转)

原创 IT综合 作者:amyz 时间:2007-08-17 10:33:32 0 删除 编辑
实践ORM,创建基于Grove的.NET应用程序(三) (转)[@more@]

ORM,创建基于Grove的.NET应用程序(三)XML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

 

撰稿 林学鹏 to:cnlxp@msn.com">cnlxp@msn.com

 

在当前项目的下添加CustomerManager类及类,Managers层属于商业逻辑层,负责对实体数据库操作的再一次封装。

  在商业逻辑层,此处将类构造函数定义成私有,实现Singleton模式。

 

CustomerManager.cs

  using System;

  using Grove;

  using webApp1.Entities;

  using WebApp1.Entitydb;

 

  public class CustomerManager

  {

  private CustomerManager()

  {

  }

  public static void AddNewCustomer(Customer c)

  {

  CustomerDB db=new CustomerDB();

  db.Insert(c);

  }

  public static void DeleteCustomer(Customer c)

  {

  CustomerDB db=new CustomerDB();

  db.Delete(c);

  }

  public static void UpdateCustomer(Customer c)

  {

  CustomerDB db=new CustomerDB();

  db.Update(c);

  }

  public static EntityData GetAllCustomers()

  {

  CustomerDB db=new CustomerDB();

  return db.selectAll();

  }

  }

AddressManager.cs

  using System;

  using Grove;

  using WebApp1.Entities;

  using WebApp1.EntityDB;

 

  public class AddressManager

  {

  private AddressManager()

  {

 

  }

  public static void AddNewAddress(Address a)

  {

  AddressDB db=new AddressDB();

  db.Insert(a);

  }

  public static void DeleteAddress(Address a)

  {

  AddressDB db=new AddressDB();

  db.Delete(a);

  }

  public static void UpdateAddress(Address a)

  {

  AddressDB db=new AddressDB();

  db.Update(a);

  }

  public static EntityData GetAllAddresses()

  {

  AddressDB db=new AddressDB();

  return db.SelectAll();

  }

  }

代码3.Façade层定义

  10)添加Customer和Address的添加页面,在ASPX页面后置类aspx.cs中添加对Façade层的引用实现对实体数据的插入,修改,删除等功能。

  简单示例:

  Customer c=new Customer();

  c.CustomerName=”创特软件”;

  c.CustomerDesc=”http://www.tryitsoft.com”;

  CustomerManager.AddNewCustomer(c );

  11)在Customers和Addresses表中,Addresses表中的CustomerID为主表Customers的PK(主键),所以实体类Address.cs的属性CustomerID,绑定的DataField()可以改为ForeignKeyField(),在对某个Customer操作的时候,可以通过以下方式得到该客户的所有地址。

 

ArrayList addresses=new ArrayList();

IobjectOperator oo=ObjectOperatorFactory.GetObjectOperator();

oo.RetrieveChildObjects(c.CustomerID,addresses,typeof(Address));

 

  12)当我们需要快速开发,不需要考虑三层或多层应用的时候,实现实体类的自身持久化就很有必要,要实现实体类的自身持久化,必须继承Grove.DataObject.EntityClassBase。

简单示例:

  Customer c=new Customer();

  c.CustomerName=”创特软件”;

  c.CustomerDesc=”http://www.tryitsoft.com”;

  c.Insert();

  13)***关于实体映射多表关系查询。点击GroveToolKit的toolbar中的Build Relationship Query按钮,出现多表关系查询向导,选择Entity Class点击下一步,出现Relation Query Builder窗口,在窗口的下半部分右击选择”Add Table…”或者在窗口的toolbar上点击Add Existing Table按钮,出现添加表窗口,分别添加表Customers和Addresses

 

2003-12-161533470.png" o:title="">

图3. 构造关系实体映射

  在图3中,点击Customers表的字段部分(按住鼠标左键)拖动到Addresses表的字段区域,并放开鼠标左键,出现两表关系窗口

图4.表间关系属性

  在图4中选择Addresses表的CustomerID列后,点击OK,如果需要指定两表之间是左关联、右关联或者全外关联,请选择Include rows下的选项。

图5.关系生成后

  在图5中,右击Customers表选择Select all columns或选择Table Property后选择需要显示的列。

图6.选择表的显示列

 

  在图5中,选择Addresses表需要显示的列,然后点击当前窗口toolbar上的执行按钮,如果正确执行,执行结果将会显示在当前窗口,现在,点击toolbar上的Preview relation query class按钮预览关系实体映射类。

 

CustomersRelationQuery.cs

  using System;

  using Grove.DataObject;

  [RelationTable("CustomersRelationQuery",BeginWithTable="Customers")]

  public class CustomersRelationQuery

  {

  [RelationReflect("Customers","Addresses")]

  [RelationField("CustomerID","AddressID")]

  public string Relationship_1

  {

  get{return "[Customers].[CustomerID]=[Addresses].[AddressID]";}

  }

 

  int _CustomerID;

  [DataField("CustomerID",TableName="Customers")]

  public int CustomerID

  {

  get{return this._CustomerID;}

  set{this._CustomerID=value;}

  }

  string _CustomerName;

  [DataField("CustomerName",TableName="Customers")]

  public string CustomerName

  {

  get{return this._CustomerName;}

  set{this._CustomerName=value;}

  }

  string _CustomerDesc;

  [DataField("CustomerDesc",TableName="Customers")]

  public string CustomerDesc

  {

  get{return this._CustomerDesc;}

  set{this._CustomerDesc=value;}

  }

  string _Address;

  [DataField("Address",TableName="Addresses")]

  public string

  {

  get{return this._Address;}

  set{this._Address=value;}

  }

  }

代码4.关系映射实体类


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/10752019/viewspace-963552/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    3982
  • 访问量
    7896802