加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

[Dev-Boo]NBearLite.QueryColumnsGenerator for Boo

发布时间:2020-12-16 23:11:49 所属栏目:大数据 来源:网络整理
导读:NBear是一个很不错的dotnet ORM框架,是由国人在cnblog开发维护的一个项目. 有需要使用NbearLite和Sqlite做些工具,NbearLite有Generator只有C#和VB.net两种语言支持,看了一下Generator的source后决定试试加入Boo的支持.效果还可以,但没有完全测试过其他的库,反
NBear是一个很不错的dotnet ORM框架,是由国人在cnblog开发维护的一个项目. 有需要使用NbearLite和Sqlite做些工具,NbearLite有Generator只有C#和VB.net两种语言支持,看了一下Generator的source后决定试试加入Boo的支持.效果还可以,但没有完全测试过其他的库,反正Sqlite生成的tools和C#内容一样. 分享一下过程: 当然先是需要down一份NBearLite的src了 http://www.nbear.org/ 以下将使用root指代源文件夹根目录,如下载的NBear压缩包解开后的路径为: C:Documents and SettingsAdministrator桌面NBearLite_v1.0.2.4_src 则root代表上面的完整路径 看看在root有些什么,BSD.license lib readme.txt src 所有的源码都在src这个目录下,而我们需要修改的是NbearLite这个solution的NBearLite.QueryColumnsGenerator这个project.你需要sharpdevelop(http://www.sharpdevelop.net/OpenSource/SD/Download/),直接到rootsrcNBearLite下打开NBearLite.sln 找找NBearLite.QueryColumnsGenerator这个project,如果顺利的话你应该很容易找到它. 如果你都准备好了,那么我们下面就可以开始对源码进行改写,增加一些我们需要的内容. 其实需要改动的代码量很少,只需要改到Form1.Designer.cs和Form1.cs这两个文件的少量的内容就可以了,不过在改源码之前我们还需要做一些操作. 我们得增加一些references,因为在原来的solution中引用Mysql和Sqlite的assembly的路径有问题,我这里build的时候有报错,所以我自己手动增加了对这两个assembly的引用(到rootlib下找). 对着NBearLite.AdditionalDbProviders的References右键->"Add Reference"->".Net Assembly Browser"->"Browse...",在弹出的文件选择窗口中定位到rootlib目录下,选择Mysql.Data.dll和System.Data.SQLite.dll这两个assembly. NBearLite.QueryColumnsGenerator相同的操作. 对着NBearLite.QueryColumnsGenerator右键->"Build",如果没有报出errors那么咱们就可以开始修改源码了. // 修改Form1.Designer.cs // 239行到241行的内容,也可以自己find一些关键字,如C#,VB.net // 原来的内容如下(注:我已经把源码的回车去掉并成一行,只是为了在blog上显示的简洁一些) // this.outputLanguage.Items.AddRange(new object[] {"C#","VB.NET"}); // 增加我们需要的"Boo"选项 this.outputLanguage.Items.AddRange(new object[] {"C#","VB.NET","Boo"}); // >> 省略部分代码 << // 定位到295行上 // 原来的code // this.saveFileDialog1.Filter = "C# Code Files*.csVB.NET Code Files*.vb"; // 这里增加boo的内容 this.saveFileDialog1.Filter = "C# Code Files*.csVB.NET Code Files*.vbBoo Code Files*.boo"; // 这里或运算符在blogger上显不出来,所以大家仿着原来的code写 这样Form1.Designer.cs就改完了 //修改Form1.cs // 需要增加一个Boo的assembly的reference,在boo的bin目录下找"Boo.Lang.CodeDom.dll" // 定位到"private void btnGen_Click(object sender,EventArgs e)"上 // 我们需要增加自己的provider(这就是为什么我们需要reference上面的assembly了) // 下面是原来的code // if (outputLanguage.SelectedIndex == 0) // provider = new Microsoft.CSharp.CSharpCodeProvider(); // else // provider = new Microsoft.VisualBasic.VBCodeProvider(); // 改动过的code if (outputLanguage.SelectedIndex == 0) provider = new Microsoft.CSharp.CSharpCodeProvider(); else if (outputLanguage.SelectedIndex == 1) provider = new Microsoft.VisualBasic.VBCodeProvider(); else provider = new Boo.Lang.CodeDom.BooCodeProvider(); // >> 省略部分代码 << //定位到1189行上,在"private void tbPath_Leave(object sender,EventArgs e)" // 同样我们需要在if里增加我们boo的内容 // 下面是原来的code // if (tbPath.Text.Trim().Length > 0 && System.IO.Path.GetExtension(tbPath.Text) != ".cs" && System.IO.Path.GetExtension(tbPath.Text) != ".vb") // 下面是改动后的code if (tbPath.Text.Trim().Length > 0 && System.IO.Path.GetExtension(tbPath.Text) != ".cs" && System.IO.Path.GetExtension(tbPath.Text) != ".vb" && System.IO.Path.GetExtension(tbPath.Text) != ".boo") // 1202行 // "private string GetExtension()"这个方法也修改少许的修改 // 下面是原来的code // if (outputLanguage.SelectedValue == "VB.NET") // { // return ".vb"; // } // return ".cs"; // 修改后的code if (outputLanguage.SelectedValue == "VB.NET") { return ".vb"; } else if (outputLanguage.SelectedValue == "C#") { return ".cs"; } return ".boo"; // 这样需要改动的代码都改完了,再build出project看看效果 到rootsrcNBearLiteNBearLite.QueryColumnsGeneratorbinRelease下找 生成的代码还不能直接使用,而且因为存在两个namespace所以compile时会报错,解决的办法是改动生成的代码,如: // 第一步,把从第二行(包括第二行)以后的code都回缩一个indent // 第二步,去掉第二个namespace,以"__"开关的那个命名空间 // 第三步,ctrl+r调出replace窗口替换所有的"___"(三个下划线)为""(空) // 第四步,ctrl+r调出replace窗口替换所有的"__"(两个下划线)为""(空) // 第五步,修改TABLENAME字段的声明 // 原来的code // private TABLE_NAME as string // 增加final static,下面是改动过的code private final static TABLE_NAME as string 这样应该就可以了,build试试,是不是不再报错了?很简单不是吗?哈哈. (后来测试发现还是不行,IQueryTable接口里有一个___GetTableName的方法需要实现,但boo好像不可以使用三个下划线开头做为方法名,晕,不明白为什么作者会用下划线开头!再想想别的方法)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读