.netTier开发问题记录-01
2011-01-09 17:12
155 查看
项目基本架构:ExtAspNet+.netTier信息管理系统,数据库sql2000(客户要求)。
开发使用的是ExtAspNet做前端展示,数据层使用.netTier
问题点:更新数据库表结构后重新生成.netTier数据层并引入数据层,在查询数据库的时候出现数组下标越界异常。
分析及解决方案:主要是数据库添加了新的字段,分析应该是由于字段添加后没有同步到数据层的原因。
1、根据对.netTier的了解,netTier的所有查询都是生成了相应的存储过程,怀疑是否是重新生成netTier时存储过程没有更新造成,嗯,好,马上查看数据库存储过程,奇迹出现了存储过程中的字段的更新了的,这下子难办了,看来还是对netTier的架构不清晰啊!
2、没办法只能单步调试netTier了,也能进一步了解netTier的结构,呵呵。调试开始了,首先来到了是XXX.Data.Base名称空间下的(1)EntityProviderBaseCore.generated.cs 类的GetAll方法,看来netTier的所有数据访问方法是重这里统一出来了,进一步F11跟踪。这下来到了我们需要访问表的具体操作类来了XXX.Data.SqlClient名称空间下的(2)SqlModelTableProviderBase.generated.cs类的GetAll方法,这下看见了调用的存储过程了dbo.MODEL_TABLE_Get_List,嗯,难道还是存储过程的问题吗。马上查看存储过程,哦,不,存储过程没有问题,哎,还得继续调试啊,看来是高兴得太早了。
3、继续调试,发现在初始化DbCommand commandWrapper这个实体的时候来到了,XXX.Data.SqlClient名称空间下的StoredProcedureProvider.cs类的GetCommandWrapper方法,呵呵,根据字面意思应该是封装查询命令的方法了,看来离答案很近了。好,我们继续调试,噢!又有发现useStoredProcedure bool类型的变量为false,看来不是用的存储过程查询了。还是继续调试吧!调用相同类的GetProcedureBodyFromEmbeddedResource方法了,哈哈,return的StoredProcedureProvider.Current[name].Body这个string变量点开 快速监视 看看,哈哈!真的要少一个我刚刚添加的字段。
4、这些应该找到问题根源了,现在我来看看Current这个变量里面究竟是什么,我再跟踪原来Current这个变量就是通过StoredProcedureProvider.Deserialize()方法获取的,进入Deserialize方法。重大发现啊!原来这里使用的是XXX.Data.SqlClient.Procedures.xml,打开这个看看,真的是表的查询描述啊,但是这个也是我刚刚拷贝过来的啊,字段也是更新了的,难到xml也要生成到项目的bin目录里面,不管了把bin/debug文件都删除了,重新生成,执行成功了。
现在还有一个问题是bin/debug里面没有Procedures.xml文件,难道这个文件被编译到了dll文件里面了。不明白,查查官方网站把,有答案了贴出来给大家分享。
注意:红色标记的是我项目中的表
开发使用的是ExtAspNet做前端展示,数据层使用.netTier
问题点:更新数据库表结构后重新生成.netTier数据层并引入数据层,在查询数据库的时候出现数组下标越界异常。
分析及解决方案:主要是数据库添加了新的字段,分析应该是由于字段添加后没有同步到数据层的原因。
1、根据对.netTier的了解,netTier的所有查询都是生成了相应的存储过程,怀疑是否是重新生成netTier时存储过程没有更新造成,嗯,好,马上查看数据库存储过程,奇迹出现了存储过程中的字段的更新了的,这下子难办了,看来还是对netTier的架构不清晰啊!
2、没办法只能单步调试netTier了,也能进一步了解netTier的结构,呵呵。调试开始了,首先来到了是XXX.Data.Base名称空间下的(1)EntityProviderBaseCore.generated.cs 类的GetAll方法,看来netTier的所有数据访问方法是重这里统一出来了,进一步F11跟踪。这下来到了我们需要访问表的具体操作类来了XXX.Data.SqlClient名称空间下的(2)SqlModelTableProviderBase.generated.cs类的GetAll方法,这下看见了调用的存储过程了dbo.MODEL_TABLE_Get_List,嗯,难道还是存储过程的问题吗。马上查看存储过程,哦,不,存储过程没有问题,哎,还得继续调试啊,看来是高兴得太早了。
3、继续调试,发现在初始化DbCommand commandWrapper这个实体的时候来到了,XXX.Data.SqlClient名称空间下的StoredProcedureProvider.cs类的GetCommandWrapper方法,呵呵,根据字面意思应该是封装查询命令的方法了,看来离答案很近了。好,我们继续调试,噢!又有发现useStoredProcedure bool类型的变量为false,看来不是用的存储过程查询了。还是继续调试吧!调用相同类的GetProcedureBodyFromEmbeddedResource方法了,哈哈,return的StoredProcedureProvider.Current[name].Body这个string变量点开 快速监视 看看,哈哈!真的要少一个我刚刚添加的字段。
4、这些应该找到问题根源了,现在我来看看Current这个变量里面究竟是什么,我再跟踪原来Current这个变量就是通过StoredProcedureProvider.Deserialize()方法获取的,进入Deserialize方法。重大发现啊!原来这里使用的是XXX.Data.SqlClient.Procedures.xml,打开这个看看,真的是表的查询描述啊,但是这个也是我刚刚拷贝过来的啊,字段也是更新了的,难到xml也要生成到项目的bin目录里面,不管了把bin/debug文件都删除了,重新生成,执行成功了。
现在还有一个问题是bin/debug里面没有Procedures.xml文件,难道这个文件被编译到了dll文件里面了。不明白,查查官方网站把,有答案了贴出来给大家分享。
注意:红色标记的是我项目中的表
相关文章推荐
- 微信公众号开发问题记录_01
- Go语言开发问题记录【01】
- Linux 下内核模块的开发方式的记录 及问题解决(入门的Helloworld)
- Android闹钟开发问题点记录
- 一周Java开发问题记录
- webpy开发笔记01-调试模式下异常捕捉问题
- iOS菜鸟的开发记录(01)
- .net core 产品开发问题记录
- 01--Java开发中文乱码问题分析
- 微信公众平台开发遇到的问题记录.不定时更新.
- 百度地图开发各种问题的记录
- Cocos2DX开发:记录遇到的一些问题和解决方法
- android 开发问题记录-2015-07-09
- Win64 Driver开发问题记录(三)
- TC pdm与oracle erp 接口开发的一些问题记录1
- VS2010-C#应用开发问题记录
- html C# 开发问题记录
- 记录: 开发中的2个线程的使用问题
- jQuery mobile 开发问题记录
- 游戏开发学习记录01-关于在Unity开发的游戏中部署后端云的选择