可以在mono下运行的一个ajax web小程序,使用PostgreSQL作为数据库(期待MonoDevelop 2.0)
MonoDevelop 2.0 beta2终于发布了,虽然依然有BUG,翻译也很差劲,我还是决定用它做点事情,MonoDevelop 2.0 很让人期待,还记得asp.net上关于ajax的视频吧,我觉得还不错,所以我决定生产一个mono版本的的ToDo List, 或者说改造更合适一点,在这个用脑过度的时代,能省还是多省点力气吧。
Mono 2.0 应该已经支持ajax了吧,也许是Mono 2.2, 所以问题不在于 mono 是否支持 ajax,关键在于选择什么数据源来存储数据,刚开始的时候,我想自己实现一个ObjectDataSource, 弄了半天,感觉挺复杂的。后来我觉得尽量靠近原始的实现应该更容易编写吧,我看了一下原来的 DataSet 定义 和 DataAdapter 实现,考虑自己只用实现部分就能完成任务,感觉这个主意不错,正编写的时候,我突然想:也许Visual Studio 能帮助我们实现代码,看了一下TaskDataSet的原始定义,感觉挺简洁,并且不没有强制使用Sql Server, 只是根据工厂提供者采用通用编程的方式实现代码, 我记得 Npgsql 实现了DatabaseProviderFactory, 决定让visual studio 帮助我生成代码。
Mono 自己代的 xsd.exe 工具只能生成数据集定义,不能声称适配器类(要么是我的方法不妥当),我在 machine.config 中的System.Data配置节添加了Npgsql的数据提供者工厂说明,并且将Npgsql.dll 和 Mono.security.dll (应该是吧) 添加到全局程序集中(仅仅添加到引用中不能用,在程序的System.Data配置节中增加说明也不能被Microsoft工具感知),然后运行自定义工具,就生成了我们需要的。cs文件,保存文件,复制到Mono项目中就好。
转到Linux平台,使用MonoDevelop创建Asp.Net工程,增加相关的引用和文件,然后运行就好了。
附加说明:
关于数据库:数据库使用PostgreSQL,较新的版本应该都行,大部分Linux发行版应该都能安装。数据库使用pgadmin管理,大部分 Linux发行版应该都有打包的,从系统安装源应该就能下载 PostgreSQL 和 Pgadmin, 个人建议从你所使用的linux发行版的安装源处安装这些软件(光盘或者网上的安装源),从PostgreSQL官方下载可能会遇到不必要的安装麻烦。
关于数据库访问组件(Npgsql):如果安装了Mono以及开发工具的话,你应该已经有Npgsql了,如果没有安装,可以安装mono-data套件(mono平台的一部分,各种数据库访问接口都有)或者直接去Npgsql官方下载。
关于数据库创建:在SQL Server中使用[]限定一个标识符,意味着在访问是也必须严格按照定义来匹配,在PostgreSQL, ""的作用和[]类似,通常不要过分区分大小写能带来开发上的方便。特别地,我们希望自己强调大小写,但是不希望数据库系统过分拘谨于标识符的大小写,这样特别容易出错。很不幸(也许是万幸),如果你使用pgadmin创建数据库对象,默认它会自己加上强制限定符"", 我们可以在查询窗口中手动创建这些对象,华丽的工具在浏览和修改数据时还行,创建的时候,没有什么理由不使用代码完成。
一个小程序,希望你能喜欢Mono, 一片沙漠,等你来开垦,等mono 2.0 final 发布的时候,我会给Mono Asp.Net 爱好者一份大礼,哈哈:)
文件说明:images/* 一些图片,MasterPage.master 母板页,Default.aspx 唯一的页面,StyleSheet.css 样式表,TaskDataSet.Designer.cs 数据集和适配器定义,web.config 配置文件(其中包含针对Npgsql的System.Data配置节,应该没有用,放在machine.config供工具使用才好), App_Data/* 数据库脚本。
表说明:tasks表,包含三个字段,taskid serial 类型,name char varing 类型,complete bool 类型。
代码下载地址:https://files.cnblogs.com/mathphoenix/AspNetTestForBeta2.zip
注意,程序运行环境:linux+mono+postgresql
Have a lot of fun...