上一节讲的是如何把单表映射成一个实体和一个数据表。
  这里我们讲述如何实现一对多的多表关联,这种关联在开发中也是最常见的。
  通常一对多的情况下,我们要求,主表的primarykey应该是 从表的primarykey之一。为了区分各个表之间的PrimaryKey,我们引入了SecondaryKey的概念。用主表PrimaryKey+从表SecondaryKey构建了一个从表的PrimaryKey.呵呵,这里说得有点拗口。所有的sql都是基于这个模式构建的。所以,我们以SendOutDataSet为例,我出售了两样东西,那么我数据库里面应该存放 卖给谁SendOut 卖了什么东西SendOutItem .主表SendOut《Primarykey="SendID"》,从表SendOutItem.<primarykey=SendID secondaryKey=ItemID>
这样我们就构建这样的一个DataSet包含了两个DataTable.这两个DataTable把我们设置的PrimaryKey SecondaryKey的属性写入Column 的ExtendsProperties中。我们只需要做这样的一个从这个DataSet获取这样信息并且构建相应的Insert/Update/Delete等等方法的DataAccess就可以实现不需要再写那些讨厌的Insert/Update/Delete语句了。啊,世界从此清净了许多。
   然后,我们还发现了还有不足的地方,那就是很多时候我们要删除一整个的数据,比如我卖出去一个单子的东西很多很杂,如果我用DataSet的形式的话,那么我就变成要一条一条的删除,所以,我们就制造了UpdateObject DeleteObject来减轻这种负担,比如我想删除某个人的订单<~_~!当然只是假设>,那么我需要构建两个Delete对象,然后传递给DataAccess,来执行两次的Sql,这样我们依然只是需要代码生成器来生成,还是不需要手写Update/Delete语句,目的也很明显,为了防止新手误用了错误的Sql语句,结果导致数据被删除。虽然可以通过日志的方式恢复,但是也很麻烦。
   当然了,DataAccess还应该作更多的事情,比如获取服务器时间,表之间的拷贝<表结构一致的情况下>,依据PrimaryKey删除数据,根据PrimaryKey获取<SendID传入,根据DataSet来获取SendOut SendOutItem的数据。>。这些事情都是一劳永逸的,一旦做好,就可以反复的重新利用,而且整个框架也就两三个DataAccess。但是有很多的DataSet BusinessRule BusinessFacade。
 
   sample code:
如何减少基于DataSet框架的代码输入量(二)using System;
如何减少基于DataSet框架的代码输入量(二)
using FishSky.Data.Base;
如何减少基于DataSet框架的代码输入量(二)
如何减少基于DataSet框架的代码输入量(二)
namespace FishSkyTest.DataTest
}

如何减少基于DataSet框架的代码输入量(二)using System;
如何减少基于DataSet框架的代码输入量(二)
using FishSky.Data.Base;
如何减少基于DataSet框架的代码输入量(二)
如何减少基于DataSet框架的代码输入量(二)
namespace FishSkyTest.DataTest
}

如何减少基于DataSet框架的代码输入量(二)using System;
如何减少基于DataSet框架的代码输入量(二)
using System.Data;
如何减少基于DataSet框架的代码输入量(二)
using FishSky.Data.Base;
如何减少基于DataSet框架的代码输入量(二)
如何减少基于DataSet框架的代码输入量(二)
namespace FishSkyTest.DataTest
}

如何减少基于DataSet框架的代码输入量(二)using System;
如何减少基于DataSet框架的代码输入量(二)
using System.Data;
如何减少基于DataSet框架的代码输入量(二)
using FishSky.Data.Base;
如何减少基于DataSet框架的代码输入量(二)
如何减少基于DataSet框架的代码输入量(二)
namespace FishSkyTest.DataTest
}

如何减少基于DataSet框架的代码输入量(二)using System;
如何减少基于DataSet框架的代码输入量(二)
using System.Runtime.Serialization;
如何减少基于DataSet框架的代码输入量(二)
using FishSky.Data.Base;
如何减少基于DataSet框架的代码输入量(二)
如何减少基于DataSet框架的代码输入量(二)
namespace FishSkyTest.DataTest
}

如何减少基于DataSet框架的代码输入量(二)using System;
如何减少基于DataSet框架的代码输入量(二)
using System.Data;
如何减少基于DataSet框架的代码输入量(二)
using NUnit.Framework;
如何减少基于DataSet框架的代码输入量(二)
namespace FishSkyTest.DataTest

相关文章: