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

原创 2003年12月18日 00:03:00

实践ORM,创建基于Grove.NET应用程序(三)<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

撰稿 林学鹏 cnlxp@msn.com

 

       9) 在当前项目的Managers下添加CustomerManager类及AddressManager类,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)添加CustomerAddress的添加页面,在ASPX页面后置类aspx.cs中添加对Façade层的引用实现对实体数据的插入,修改,删除等功能。

       简单示例:

              Customer c=new Customer();

              c.CustomerName=”创特软件”;

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

              CustomerManager.AddNewCustomer(c );

       11)CustomersAddresses表中,Addresses表中的CustomerID为主表CustomersPK(主键),所以实体类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)***关于实体映射多表关系查询。点GroveToolKittoolbar中的Build Relationship Query按钮,出现多表关系查询向导,选择Entity Class点击下一步,出现Relation Query Builder窗口,在窗口的下半部分右击选择”Add Table…”或者在窗口的toolbar上点击Add Existing Table按钮,出现添加表窗口,分别添加表CustomersAddresses

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />CSDN_Dev_Image_2003-12-161533470.png

3. 构造关系实体映射

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

CSDN_Dev_Image_2003-12-161533472.png

4.表间关系属性

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

CSDN_Dev_Image_2003-12-161533474.png

5.关系生成后

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

CSDN_Dev_Image_2003-12-161533476.png

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 Address

         {

              get{return this._Address;}

              set{this._Address=value;}

         }

     }

代码4.关系映射实体类

基于Grove的.NET应用程序开发提示

基于Grove的.NET应用程序开发提示 1. 尽量避免新增映射实体类,主要表现在关系映射实体。当程序需要查询符合某种条件的记录时,往往需要通过关系映射实体进行查询,当该关系实体在其他调用者使用...
  • u014739805
  • u014739805
  • 2014年04月30日 18:08
  • 266

.NET进阶——浅谈ORM的映射方案

结合上文,在对ORM的结构实现简单进行描述: 首先ORM对数据访问层的增删改查方法进行抽象,变化的东西只是不同的实体参数(而泛型是很容易解决),而底层的这些增删改查方法的sql语句不再是select...
  • akkzhjj
  • akkzhjj
  • 2014年08月31日 22:41
  • 1476

MVC、ORM别再用自以为是忽悠别人了

MVC正是因为割裂了view、model、controller,让CPU和内存干了更多的工作,电脑干了更多的工作凭什么比干了更少的工作有更好的效能表现?MVC和ORM的发展并不是为了提升性能,那不是两...
  • ITDOK
  • ITDOK
  • 2016年12月19日 23:40
  • 1620

C# ORM框架 开源

ORM源码: https://github.com/dewfn/SmiteRepositorySmiteRepository.NET ORM框架,基于Dapper效率高,操作实体类就可以实现数据库操作...
  • System_Bug
  • System_Bug
  • 2016年05月24日 17:37
  • 1901

使用MongoDB的ORM版Mongose来写你的数据操作吧!

Adding the MongoDB Backend The first necessary change is to add a connection to the MongoDB database...
  • f112122
  • f112122
  • 2015年04月05日 14:50
  • 945

ORM for Net主流框架汇总与效率测试

go:http://www.cnblogs.com/stone_w/archive/2011/09/30/2196292.html 框架已经被越来越多的人所关注与使用了,今天我们就来研究一下...
  • ArvinStudy
  • ArvinStudy
  • 2013年07月23日 11:41
  • 2750

轻量级ORM框架——第一篇:Dapper快速学习

我们都知道ORM全称叫做Object Relationship Mapper,也就是可以用object来map我们的db,而且市面上的orm框架有很多,其中有一个框架 叫做dapper,而且被称为t...
  • huangxinchen520
  • huangxinchen520
  • 2016年09月11日 19:15
  • 2236

2017.01.05回顾 ORM例子解读

昨天很不爽,对于领导只注重应用,不注重理论研究,表示愤慨,本来搞清楚了理论,才能更好更自如更正确地去应用,其实感觉这个世界就是这样存在一些虚假的东西,或者说面子的东西,有些人可能虚虚实实也混得挺好,我...
  • strwolf
  • strwolf
  • 2017年01月06日 10:23
  • 310

ORM学习之EF理解

ORM是一种思想,无论是在工作中还是生活中,都有这种思想的体现!学习来自生活!...
  • u010843114
  • u010843114
  • 2016年03月23日 17:27
  • 1184

ORM for Net主流框架汇总与效率测试

ORM for Net主流框架汇总与效率测试 框架已经被越来越多的人所关注与使用了,今天我们就来研究一下net方面的几个主流ORM框架,以及它们的效率测试(可能会有遗漏欢迎大家讨论)。 ...
  • rise51
  • rise51
  • 2016年04月17日 10:37
  • 751
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实践ORM,创建基于Grove的.NET应用程序(三)
举报原因:
原因补充:

(最多只允许输入30个字)