您的位置:首页 > 其它

.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文件里面了。不明白,查查官方网站把,有答案了贴出来给大家分享。

注意:红色标记的是我项目中的表
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: