很多时候,用数据库实体类生成工具生成的对象类都是不够用的:这些实体类基本上能够对应到我们编程过程中的一些对象类,但是又不能完全对应。因为其中的属性和变量都是基于数据库中的字段机械的生成的,而数据库中的字段一般都是“值得去记录”的信息:基础属性、常规配置、实体间关系、过程执行中的参数、过程执行完后的结果等信息,而不会记录执行过程中实时变化着的状态、过程中用到的一些对象如计时器等等临时信息。这就导致生成的这些实体类,能比较方便的对应到数据库的操作,但是对应到我们的业务过程还很不够方便。
刚开始,我不得不将一些关键性的对象类再编写一遍,使得它们能方便地满足我们的业务编程需要,这样这些关键的实体就有了两套类:一套自动生成的,一套自己另外写的,程序初始化时,先通过数据库操作将数据库中的信息转化到自动生成的那一套对象,然后将其中一些对象转换成自己编写的,当过程执行完后需要记录日志时,再将这些对象转换为自动生成的那一套。其实逻辑上完全是多余的!后来我想办法将两套变为一套,于是干脆就在自动生成的代码里添加我需要的那些属性或对象声明。只是因为数据库的设计也经常会进行一些微调,这样当重新生成这些实体类时,我手动修改的地方还得再来一遍,感觉比刚开始用两套类还麻烦。
后来我想到了partial关键字,将自动生成的实体类前面通通加上partial,表示在当前的项目里可能还有该类的另一部分声明和实现(当然,也可能没有)。这样,当有需要的时候直接在另一个CS文件中手动添加有关该类的实现,当数据库的设计发生变化时,只需要重新自动生成,两边几乎互不影响,从而达到既可以满足业务编程的需要,也可以直接丢给数据库访问接口去进行数据库操作。