很多人喜欢模板,因为合理地使用工具可以帮我们少写很多代码,可是模板的复杂性却又让很多人在使用中困难重重.
我们在ITOO项目中,使用了DB First和ModelFirst相结合的方式实现实体数据的映射.说得详细一点就是先将PowerDesigner设计的实体图导入数据库生成表,然后去掉外键关联,只保留主键.使用EF的DBFirst生成Model,在Model中手动添加关联关系,再根据模型生成数据库.
这样做有点繁琐,不过好处多多.首先避免了再次手动画Model,实体既多又容易出错,其次,如果数据库中有外键关联的话,映射到Model中会生成多余的属性,还需要我们手动维护.综合以上因素,我们选择二者结合的方式.
不过,在操作过程中还是会有错误.因为以上过程是自动映射,必然使用到了模板,而这里正是大量使用了T4模板(.tt文件).下面我要说的就是从SSDL生成SQL脚本时.tt文件.上篇博客中已经学习了.edmx文件的xml内容,已经知道SSDL描述了表,列,关系,主键及索引等数据库中存在的概念.在.edmx页面空白处右键,选择"根据模型生成数据库",正常情况下会生成sql语句,不正常情况下呢,模板也不是特别好使的,下图就出错了,我们来看一下:
分析了很久终于找到问题所在,大家可以双击错误列表的提示信息,跟踪到弹出文件,即SSDLToSQL10.tt.文件内容如下所示:
我知道很多人看到密密麻麻的代码页面尤其是这种可读性非常差的拼接类型的代码,都匆匆关闭了…可是问题就出在这里.找到上面被红色框出的一行代码DbConfiguration.SetConfiguration(newTemplateDbConfiguration());果断删掉.保存,生成,错误消失。
之前我尝试了很多方法,比如修改配置文件之类的,后来想想最容易出错的还是模板.有些东西因为不熟悉才不敢碰,可是若永远不碰,就没个日子熟悉了。