易轩

持续做有意义的事

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

还是以前面使用到的那个Test.mdb为例:其中有一个表Score(学生成绩表),有三个字段:StudentIDCourseIDMark,意思是学号为StudentID的学生在课程号为CourseID的学科考试中的得分是Mark字段的值。其实,Mark这个字段名我原来用的是Score,与数据库表的名字相同,但是这样我发现自动生成的CS文件无法通过编译,原因是Score类中有一个与类名相同的字段名。为了把问题简化,我把Score改成了Mark,但是就用Score在数据库中并没有错啊!

 

上面只是一种情况,特别还有数据库设计得不是很“常规”的时候,比如字段名是用空格隔开的,这样直接将字段名匹配成变量名,在编译时就会出现问题。

 

这时可以使用前面生成的XML文件,比如成绩表的分数字段我用的还是Score,与表名一样,我可以在XML文件中找到“Score”那个表的描述,在<Name>Score</Name>(原为<Name>Mark</Name>)下面,添加<FieldName>Mark</FieldName>,这样Score对应的变量名就会映射为Mark。不过,我们需要从这个修改后的XML文件导入数据库架构信息,并再次生成CS或者DLL文件。

导入XML文件的代码非常简单,大致像下面这样:

                XmlDocument doc = new XmlDocument();

                doc.Load(xmlFilePath);

                DataBase database = new DataBase();

                database.ConfigXmlNode = doc.DocumentElement;

         这里不需要再指定数据库的连接,XML文件中就已经描述了该信息,然后重新生成即可。重新生成的代码大致如下

      CodeBuilder.BuildDBEntityCode(database, saveFilePath);  //生成CS文件

              

      CodeBuilder.BuildDBEntityAssembly(database, saveFilePath);  //生成DLL文件

 

         除了自定义实体的类名、成员名外,还可以使用XML文件记录“附加外键表字段”后的实体类信息。例如在MSSQL中(Access中也可以定义主外键关系)定义了主外键关系StudentIDCourseID,可为Score实体附加其外键表中的字段:如StudentNameSexAgeCourseName等。附加的操作由额外编写代码完成,如:

           DataBaseTable dbt = database.GetTable("Score");

              dbt.AttachColumn("Student", " StudentName ", "studentName");  //附加后的成员名studentName

              dbt.AttachColumn("Course", "CourseName", "courseName");       //附加后的成员名courseName

 

     这样附加后生成的实体类Score将有5个字段,在查询时,DA会自动生成联合查询的SQL语句,而且对新的Score对象所作的修改提交到数据库时,不会影响到外键表。

posted on 2009-05-15 09:21  易轩  阅读(768)  评论(1编辑  收藏  举报