MyGeneration学习笔记(5) :在Web Service中使用dOOdad(中)

简介:

   我看了一下dOOdad的源码和生成的代码,发现实体类中有提供ToXml和FromXml方法,实现了字符串到Datatable的转换,于是决定试下用字符串来保存DataTable信息,然后再在网络中传输字符串,这就是我的原始思想。

      在Web Service中使用dOOdad(上),将FromDataSet/ToDataSet改成FromXml/ToXml,返回值/参数改成string,即可实现以字符串作为返回值,下面以插入一条记录为例:

[WebMethod] 
public   bool  Insert( string  str) 

      
bool wasSaved = false
      
try 
      

         Employees emps 
= new Employees(); 
         emps.FromXml(str); 
         emps.Save(); 
         wasSaved 
= true
      }
 
      
catch { } 
      
return wasSaved; 
}
 

        但这样又引发了新的问题:ToXml后的字符串丢失了DataTable中的部分重要信息,如DataSet的Schema、DataRow的状态(Added/Modified/Deleted)、没有赋值的属性等。所以在服务器端从字符串中取得数据Load进业务实体后,还得一些额外的操作,于是我尝试了下面两种方法,且都可以通过测试: 

 

方法1 :new一个新业务实体,将数据拷贝到新实体中

Web服务端代码:

[WebMethod]
public   bool  Insert( string  str)
{
  Employee emps 
= new Employee();
  emps.FromXml(str);
  Employee temp 
= new Employee();
  temp.AddNew();
  temps.FirstName 
= emps.FirstName;
  temps.LastName 
= emps.LastName;
  ……   
//其他字段的赋值
  temp.Save();
  
int id = temp.ID;
}

调用WebService的客户端代码:

Employee emps  =   new  Employee();
emps.FristName 
=   " Happy " ;
  temps.LastName 
=   " Hippy " ;
…… 
// 其他字段的赋值
Serivce1 webservice  =   new  Service1();
webservice.Insert(emps.Toxml());

       这种方法也不是很好,服务器端要从字符串中解析出数据并new一个新对象,再将数据拷贝到新对象中。麻烦,不爽。于是,我又尝试了下面的方法。

 

方法2 :为业务实体找回丢失的部分重要信息

          讲解这种方法之前,先解释一下emps.Save的原理,该Method内部,判断DataRow的状态(Added、Modified、Deleted)并根据状态执行相应的插入/更新/删除操作。
          事实上,执行emps.FromXml之后,DataRow的状态为Added(可以用RowState()进行测试),所以理论上是可以执行Save()来直接进行插入操作,而不用new一个新对象;然而如方法1中所说,emps.ToXml获得的字符串丢失了部分信息--emps对象的那些没有赋值的属性都丢失了,所以像ID这种在客户端没有赋值的属性,在xml中也没有它相应的标签(<tag>).
          客户端将业务实体Toxml转换成string,传给服务器端,服务器端的代码:

[WebMethod]
public  Insert( string  str)
{
  
//客户端没有对ID进行赋值
  Employee emps = new Employee();
  emps.FromXml(str);
  
//在这里访问emps.ID会出错:ID不是School中的列。
  emps.Save();//出错(同上)。
}

         出现上述注释中的问题的原因是ID列的信息丢失了,这时我们可以手动添加ID列,示例代码如下:

[WebMethod]
public  Insert( string  str)
{
         Emplyee emps 
= new Employee()
          emps.AddColumn(
"ID",typeof(int));
          emps.AddColumn……
//其他没有赋值的属性
          emps.Save(); //终于可以成功地写入数据库了^_^
}

        客户端代码同法1中一样,不再赘述。

        最后再补充一点:因为AddNew()方法是从数据库中检索架构的,而在调用WebService的客户端,是不能通过这种方式来创建DataTable的,所以要在ConcreteClass中加一个方法来重写AddNew()方法:

public   override   void  AddNew()
{
      
this.DataTable = new DataTable();
      
this.AddColumn(Employee.ColumnNames.ID, typeof(int));
      
this.AddColumn(Employee.ColumnName.FirstName,typeof(string));
      ………………
      
base.AddNew();
}


本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2006/08/23/601237.html,如需转载请自行联系原作者

相关文章
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
【Azure 应用服务】Web App Service 中的 应用程序配置(Application Setting) 怎么获取key vault中的值
207 0
|
计算机视觉 Python
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
这篇文章是关于如何使用Flask框架结合OpenCV库,通过电脑摄像头实现视频流在网页上的实时显示,并提供了单摄像头和多摄像头的实现方法。
507 2
Flask学习笔记(六):基于Flask的摄像头-web显示代码(可直接使用)
【Azure App Service】PowerShell脚本批量添加IP地址到Web App允许访问IP列表中
Web App取消公网访问后,只允许特定IP能访问Web App。需要写一下段PowerShell脚本,批量添加IP到Web App的允许访问IP列表里!
254 2
|
关系型数据库 MySQL Linux
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
141 0
【Azure 应用服务】在创建Web App Service的时候,选Linux系统后无法使用Mysql in App
|
文件存储 Python
Flask学习笔记(一):Flask Web框架
本文介绍了Flask Web框架的基本概念、安装方法、初始化参数、程序编写、静态文件显示和配置信息加载等基础知识。
301 0
|
Shell PHP Windows
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
【Azure App Service】Web Job 报错 UNC paths are not supported. Defaulting to Windows directory.
227 0
|
Linux 应用服务中间件 网络安全
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
【Azure 应用服务】查看App Service for Linux上部署PHP 7.4 和 8.0时,所使用的WEB服务器是什么?
156 0
|
4月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
458 4
|
8月前
|
缓存 JavaScript 前端开发
鸿蒙5开发宝藏案例分享---Web开发优化案例分享
本文深入解读鸿蒙官方文档中的 `ArkWeb` 性能优化技巧,从预启动进程到预渲染,涵盖预下载、预连接、预取POST等八大优化策略。通过代码示例详解如何提升Web页面加载速度,助你打造流畅的HarmonyOS应用体验。内容实用,按需选用,让H5页面快到飞起!
|
8月前
|
JavaScript 前端开发 API
鸿蒙5开发宝藏案例分享---Web加载时延优化解析
本文深入解析了鸿蒙开发中Web加载完成时延的优化技巧,结合官方案例与实际代码,助你提升性能。核心内容包括:使用DevEco Profiler和DevTools定位瓶颈、四大优化方向(资源合并、接口预取、图片懒加载、任务拆解)及高频手段总结。同时提供性能优化黄金准则,如首屏资源控制在300KB内、关键接口响应≤200ms等,帮助开发者实现丝般流畅体验。