起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1523|回复: 3

[处理中1] 3.5版本的 baas.net的核心代码Bug或没有测试完成?

[复制链接]

1

主题

8

帖子

20

积分

新手上路

Rank: 1

积分
20
QQ
发表于 2016-9-11 00:10:40 | 显示全部楼层 |阅读模式
本帖最后由 hlszl 于 2016-9-11 00:16 编辑

简述我遇到的问题:
UI内建立baasData组件,与自建的SQL Server中的数据库对应(数据源已连通);baas.net中新建对应的service的.w文件,并根据数据库表生成标准的CRUD查询和保存的方法。然后在UI脚本中使用。
问题现象:数据组件,能从数据库中读出数据,但不能新建数据并保存到数据库中,但js中给我返回的是Success。后续的更新删除等操作,因为第一步新建一条数据记录并保存就无法调通,就没试;

学习baas.net的联动调试文档,直接跟踪X5BaasService内的代码运行,发现自动生成的标准保存代码 com.justep.baas.action.CRUD.save(paramsObject, context); 执行了ret返回为null,但却没有抛出任何异常,因而代码认为执行成功...;摸不清楚情况,使用SQL Server Profiler观察对应数据库的访问情况:在执行save时,只有可怜两条链接信息,根本没有其他动作执行。实在没办法,看到文档中还可以调试Com.Justep.Baas.dll的代码(幸好WeX5这点好,有代码全部可跟),把问题跟出来了:

几个问题和现象,大致如下(可能跟我具体环境有关系,但代码应该确实有问题,X5的开发大神们给个解释或后续建议吧)
问题1.
断点单步调试跟踪CRUD.save方法内部实现(花费一些观察时间),不改动3.5的任何代码情况下,最后执行结果,会抛出异常;但是如果我不打断点或快速执行几个断点(调试观察过程走的很快),CRUD.save方法就不会抛出异常;这点我最后也没搞明白原因,也没有时间。后续大神给看看啥原因。
异常内容报的是:"如果分配给命令的连接位于本地挂起事务中,ExecuteReader 要求命令拥有事务。命令的 Transaction 属性尚未初始化。 "
这部分我自己没有接触过,只能网上查类似问题资料,对比人家代码发现,Util.cs的代码中
public static void SaveData(DbConnection conn, DbTransaction tran, Table table, ICollection<string> columns)....
if (table.GetRows(RowState.NEW).Count > 0)
            {
                DbCommand newCommand = conn.CreateCommand();

                newCommand.CommandText = CreateNewSQL(table, columns);
                foreach (Row row in table.GetRows(RowState.NEW))
                {
                    newCommand.Parameters.Clear();
                    newCommand.Parameters.AddRange(CreateNewParameters(newCommand, row, columns).ToArray());
                  //这里没有为newCommand.transaction赋值,是NULL,别人出这类异常,一般都是这里有问题
                    newCommand.ExecuteNonQuery();
                }
            }
.....
但是DbConnection相关的transaction又是函数在外面(CRUD.save里)的建立生成的,所以我抱着试一下的心理,重新改写Util.SaveData函数:

public static void SaveData(DbConnection conn, DbTransaction tran, Table table, ICollection<string> columns)
...
                   newCommand.Parameters.Clear();
                    newCommand.Parameters.AddRange(CreateNewParameters(newCommand, row, columns).ToArray());
                    newCommand.Transaction = tran;
                    newCommand.ExecuteNonQuery();
...
(同理也改了Update和Delete的代码部分,没有试验结果)

这样确实解决了之前抛出的这个异常,并在处理第2个问题后,能顺利在UI里为baasData组件新建数据记录,并真正保存在数据库里。
想让X5的开发大神们给我确认下,3.5的baas.net是否真的本身存在功能问题,功能的测试完成度是什么情况,能否投入实用?还是我自己的特例问题?(按理说,这大问题谁都会碰上才对,还是说只有用SQL Server数据源的才会碰上?)
问题2.
在问题1的解决过程中,实际上代码改完后没有立即成功,还是抛出了异常,是关于Sql语句中的“?” 的,虽然我不熟悉这块,但意识到可能是参数标识问题(我用的是SQL Server做数据源的),果然发现Util. CreateNewSQL中,字串处理中的参数标识是MySql的“?”......改成“@”后,功能正常。

至此,终于能使用baas.net 向数据库表里新建数据记录了。。。。

代码没有全改完,去全面测试,不知道相关的Bug有没有全部处理。但是,这些问题改完后,让我对我选择“WeX5前端 + .net 做后端 + Sql Server做数据源”的架构前途,信心上一片晦暗不明啊。。。。本以为选择自己熟悉的技能领域能加快速度,奈何内有大坑?

X5的开发大神们,谁来给我些信心?究竟我选的这条路上,这样的坑还多吗?有一些咱不怕,怕是太多了搞不过来耽误事啊。。。





1

主题

3232

帖子

1174

积分

金牌会员

Rank: 6Rank: 6

积分
1174
QQ
发表于 2016-9-12 17:02:12 | 显示全部楼层
wex5 最主要的还是一个前端框架,后端服务,完全可以选择去请求自己的 .net环境,因为baas的.net 经历的很多版本,大体上是可以走通,但是有一些细节的东西,可能是存在问题的。
在问题解决后,希望大家可以吧解决方法也分享一下,这样可以让更多的X5开发者共同进步,谢谢大家的知识共享
回复 支持 反对

使用道具 举报

1

主题

8

帖子

20

积分

新手上路

Rank: 1

积分
20
QQ
 楼主| 发表于 2016-9-12 17:38:43 | 显示全部楼层
闰土 发表于 2016-9-12 17:02
wex5 最主要的还是一个前端框架,后端服务,完全可以选择去请求自己的 .net环境,因为baas的.net 经历的很 ...

好的,了解了。这个框架是挺好,最主要是还开源,有问题确实自己下点功夫最终还是能解决。
其实方向和架子都还算比较清晰,找到问题在框架下改改也算快的,总比全部自己写来的强。

就是刚开始以为放出来的.net后端核心部分都是OK的,低估了潜在的风险。其实用这个还是小有门槛的,自己再努力努力,毕竟免费提供出来的东西已经让我和做的东西受益良多了。期待更好的改进吧~
回复 支持 反对

使用道具 举报

1

主题

2

帖子

4

积分

新手上路

Rank: 1

积分
4
QQ
发表于 2016-9-14 16:04:42 | 显示全部楼层
哎,是有些坑。真浪费时间。早知道不行,就不在这里浪费时间了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-6-27 04:10 , Processed in 0.060955 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表