NewLife.XCode 上手指南
想了解什么是XCode
在这里我不对XCode做过多介绍,XCode曾经是一个轻量级ORM组件,现在是一个重量级数据映射框架,支持实体对象数据到不同媒体的数据映射,提供面向对象的方式操作数据库,解决90%以上的数据库操作场景.是大石头和他的NewLife团队10年来的智慧结晶,感谢前人栽树!
你可以用XCode生成Domain,做增、删、改、查. 对于一个ORM我不要多强大,我只求简单,好用,能查到我要的数据,能完成我要的操作,遇到问题能有人帮助.如果你的需求和我一样,那么就停下来看看XCode的神奇之处吧!
想深入了解什么是XCode
请移步大石头的博客
ORM组件XCode(速览)
http://www.cnblogs.com/nnhy/archive/2010/09/12/1824349.html
ORM组件XCode(简介)
http://www.cnblogs.com/nnhy/archive/2010/09/13/1824666.html
给第一次接触XCode的人说的话
对于初学者,XCode看似给了一个很高的门槛,没有完整的教程,没有任何指导,有的只是源代码和一些零碎的博文和高级应用,让初学者无法入门,楼主也是才接触XCode1个多月的新手,不敢说指教,只是想丰富一下XCode的入门教程,让更多的人不会徘徊在门外不得入内.这也是楼主写本文的初衷.至于能不能写下去成为一个系列就看大家的反响吧.
正文开始!
第一次使用XCode的准备
对于第一次使用者来说,首先必要的就是提供所有的资源和材料,这点楼主第一次用XCode的时候就找了很久才把Dll和生成器下载下来,而且还不知道自己下载的是不是最新的.这里说明一下,XCode没有完整版,稳定版之说,每天大石头和他的NewLife团队都在更新,每天源码在ftp上编译4次,找到适合自己的才是最重要的,群里有人都3个月没更新dll了,照样用的挺好.不要盲目追求最新版,或者你就是喜欢当小白鼠.
dll和工具下载地址请至:http://www.newlifex.com/showtopic-51.aspx
正式开始XCode之旅
1.新建一个工程
2.引用DLL
这里楼主又要多啰嗦了,其实也是对大家好,当你解压完DLL压缩包后,你会发现有很多DLL,这些DLL到底是干什么的呢,我应该引用哪个呢?
DLL里面其实是NewLife团队的所有组件,如果只是用ORM框架的话只需要用到下面提到的DLL,其他的DLL的作用其实楼主也不是很明白,楼主也不在这里误导大家.
NewLife.Core.dll NewLife核心代码,XCode也需要引用
XCode.dll XCode代码
所以引用DLL就是主要用这2个DLL,同名的XML文件一起复制进去,作用是智能提示的时候能够显示注释内容,同名的pdb文件是调试文件,在报错的时候能指示该错误发生在第几行,用于向大石头和他的团队求助时让他们定位到错误发生的精确位置.
3.数据库建立
XCode强大之处,不仅仅是可以从数据库导出Domain,更强大的是可以根据连接字段反向生成数据库,这么说可能没想到有什么用,换句话说就是,你可以用SQL2K开发,然后部署的时候直接带上你的程序部署,XCode会自动帮你根据连接字段生成数据库,你可以直接部署到MySQL,SQL2005里,不需要改代码,不要备份数据库.当然XCode这时只是生成了一个数据库表,并没有数据,初始化菜单和管理员这些数据XCode也支持,但不是本节我们讨论的内容.这些在以后有机会再介绍.(该功能需要配config,默认该功能关闭)
这里我们讲的是如何从数据库导出Domain,为我们所用.
我们先新建一个数据库,叫XCodeTest,这里为了方便讲解,我们用最经典的,学生-科目-教师-成绩表来示范
建立一个Student表,设置ID为主键,自增
建立一个Subject表,设置ID为主键,自增
关联TeacherID,一个科目由一个老师来负责,一个老师可以负责多个科目
建立一个Teacher表,设置ID为主键,自增
建立一个成绩表,ID主键,自增
关联SubjectID和StudentID
在建立数据库的时候,我一再强调ID主键,自增,是因为XCode对自增主键支持比较好,在Save方法内部,通过判断ID是否为空来选择Insert或Update,同样你可以用Guid做主键,但那样使用就不方便了,你要自己控制Insert还是Update
4.代码生成器
终于轮到代码生成器了,说实话,楼主自己第一次用代码生成器的时候就不知道怎么用.
在打开代码生成器之前,我们要配置一下连接字符串,解压到的文件中,有XCode.exe.config,打开他编辑,可以看到已经有了很多连接字段,都是示例,我们是SQL就复制一条mssql的来改吧
1<add name="XCodeTest"connectionString="Server=(local);User id=sa;Pwd=sa;Database=XCodeTest"providerName="System.Data.SqlClient"/>
改好后,保存关闭.
打开代码生成器,看到我们刚才写的连接字符串已经被读到了
然后点连接,可以看到我们的表都已经读取到了
接下来改一改连接名,命名空间,输出目录
然后是生成,选则好模版,点击生成所有表,模版只要选择实体业务和实体数据2项就可以了,选一次模版,点一次生成所有表,再选一次模版,再点一次生成所有表!
关掉代码生成器,回到我们的项目来,新建一个文件夹Domain, 右键文件夹,添加---现有项, 把刚才生成文件都添加进来
5.从登录开始
拖2个TextBox,一个Button就可以开始了.
用户名:<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
<br />
密 码:<asp:TextBox ID="txtPsw" runat="server" TextMode="Password"></asp:TextBox>
<br />
<asp:Button ID="btnLogin" runat="server" Text="Button" />
1
1然后就是登录按钮的单击事件,这里插一段:
1在这个业务里,我们需要根据用户名查找用户,看一下跟Student有关的2个文件,一个叫Student.cs 一个叫Student.Biz.cs
1在进去仔细看一看(PS,我的Windows Live Writer的代码着色插件好像没有用嘛~~~不知道发送出去会不会着色)public partial class Student : IStudent
{ } public partial class Student : Entity<Student>
{ }
1这里可以看到partial这个属性,部分的,所以我们的Student类可以写在多个文件中,这样我们就利用这个特性,新建一个Student.My.cs
报错了,别着急,改一改,这样就可以了,所有我们自己新增和修改的代码都写在这个文件里,这样的话,如果我们数据库结构改变了,重新生成实体和业务只要覆盖那2个文件就可以了,我们自己编写的代码完全不受影响,之前楼主直接把代码写在Biz.cs里,后来数据库一改,每次替换的时候都提心吊胆的,生怕覆盖了自己写的代码.
接下来继续我们的业务,要根据用户名查找用户,XCode生成的Biz.cs文件里已经有了一些常用的方法了,可以去看一看,包括一些高级的方法,也被注释掉了,可以照着改,
/// <summary>根据Name查找</summary>
/// <param name="id"></param>
/// <returns></returns>
public static Student FindByUserName(string userName)
{
if (Meta.Count >= 1000)
return Find(_.Name, userName);
else // 实体缓存
return Meta.Cache.Entities.Find(_.Name, userName);
// 单对象缓存
//return Meta.SingleCache[id];
}
这里有必要解释下代码,Meta.Count这里判断表内数据是否超过1000,如果没超过1000的话用实体缓存来获取数据,这比较适合象菜单,权限这样的表,内容固定且不多,直接从缓存中获取,效率极高,如果超过1000条那从内存中找效率和数据库中找其实优势就不大了,所以直接从数据库中找.
接下来回到页面的登录按钮单击事件
protected void btnLogin_Click(object sender, EventArgs e)
{
string userName = txtUserName.Text.Trim();
string psw = txtPsw.Text.Trim();
Student student = Student.FindByUserName(userName);
if(student != null)
{
//这里密码就不做md5加密处理了,真实应用中一定要加密,切勿重蹈csdn覆辙
if(psw == student.Psw)
{
//登录成功跳转
Response.Redirect("Welcome.aspx");
}
}
Response.Write("用户名或密码错误!!!");
}
建立一个Welcome.aspx的文件,里面就写一句"登录成功"吧~~~登录成功后保存用户状态不在本节讨论范围内!各位看官自行处理~~
为了演示,我们到数据库里加1个用户吧~
编译执行~~结果...报错了...
仔细一看,原来是XCode自作聪明,发现我们Subject表里有TeacherID,于是就关联到了Teacher表中的ID,然后生成了一大堆扩展属性,
最要命的是还连续生成了2份,导致了错误,只要错误是出在Biz.cs中的,只管删,有能力的可以仔细分析错误,把多余的内容删除掉,其实XCode是好心做坏事了
在这里我把带红线的上上下下都删除了!
结果又出了一个错~~
好吧,我承认我错了,我不该把表命名为Score,然后里面又有Score这个属性,结果就是这个类叫Score,里面还有个Score的属性,这个好办,把属性Score改成MySCore
再编译下,继续报错,
好吧,还有个接口没改,一起改了吧
编译~~~通过了 (PS:在这里,楼主把出的错也写上来,怎么解决的也一并写上来,给大家参考下吧...遇到报错不要急,看错误提示,其实很好解决,实在不行问度娘)
一输入帐号和密码,点确定,,,结果又报错了
哦~~~~MyGod,为什么我又忘记配置Web.Config的连接字段了~~~~这里可以看到,请设置XCodeTest连接字符串,所以我们的连接字段名称必须是XCodeTest,这个当然是我们在用代码生成器的时候生成的咯....其实大家也可以在Student.cs顶上的属性声明中看到里面声明了连接字段名.
结束程序,打开web.config
<connectionStrings>
<add name="XCodeTest" connectionString="Server=(local);User id=sa;Pwd=sa;Database=XCodeTest" providerName="System.Data.SqlClient"/>
</connectionStrings>把连接字段配置好,再跑一次~~
当我看到这个的时候,我就知道成功了.~~再输错一次密码试试~~
![]()
嘿嘿~~成功了~~下一节我们来示范成绩表的操作~~~
本文的Demo下载地址:
http://dl.dbank.com/c0m64ioz5r
NewLife论坛地址:
大石头博客:
NewLife.XCode开发资源目录
http://www.cnblogs.com/asxinyu/archive/2012/06/02/2532210.html
NewLife.XCode 上手指南的更多相关文章
- NewLife.XCode 上手指南2018版(二)增
目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...
- NewLife.XCode 上手指南2018版(一)代码生成
目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...
- Rancher 快速上手指南操作(1)
Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...
- 【原创】Newlife.XCode的常见功能使用(一)查询与数据初始化
本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html Newlife XCode组件相关文章目录:http://www ...
- 【目录】Newlife XCode组件相关文章目录
本博客所有文章分类的总目录链接:本博客博文总目录-实时更新 1.Newlife XCode组件相关文章目录 1.Newlife XCode组件资源目录汇总[2013年版] 2.Newlife ...
- X下轻量级桌面WindowMaker上手指南
layout: post title: 轻量级桌面WindowMaker上手指南 tags: x11, cygwin, raspi --- 最近工作上需要在远程Linux上运行一个桌面(我需要跑Net ...
- UnityShader快速上手指南(三)
简介 这一篇还是一些基本的shader操作:裁剪.透明和法向量的应用 (纠结了很久写不写这些,因为代码很简单,主要是些概念上的东西) 先来看下大概的效果图:(从左到右依次是裁剪,透明,加了法向量的透明 ...
- Windows 8 系统完全上手指南 - 非常详尽的 Win8 系统入门学习手册与使用技巧专题教程!
每次当有新版本的操作系统发布的时候,市面上总会冒出各种从入门到精通类的学习书籍,这次最新的 Windows 8 也不例外!不过,今天给大家送上免费的大礼——<Windows 8 完全上手指南&g ...
- Resharper上手指南
原文http://www.cnblogs.com/renji/archive/2007/12/11/resharper.html Resharper上手指南 我是visual studio的忠实用户, ...
随机推荐
- Redis4.0之持久化存储
一,redis概述与实验环境说明 1.1 什么是redis redis是一种内存型的NoSQL数据库,优点是快,常用来做缓存用 redis存储数据的方法是以key-value的形式 value类型 ...
- PYTHON 爬虫 baidu美女图片
from urllib import requestimport re import osdef main(): #page=request.urlopen("http://image.ba ...
- python logging记录日志的方式
python的logging模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志级别等级:critical > error > warning > info > deb ...
- linux网络编程之socket编程(十一)
今天继续学习socket编程,这次主要是学习超时方法的封装,内容如下: ①.alarm[不常用,了解既可] 它的实现思路是这样的: 但是这种方案有一定的问题,因为闹钟可能会作为其它的用途,这时所设置的 ...
- Linux网络编程综合运用之MiniFtp实现(五)
转眼兴奋的五一小长假就要到来了,在放假前夕还是需要保持一颗淡定的心,上次中已经对miniFTP有基础框架进行了搭建,这次继续进行往上加代码,这次主要还是将经历投射到handle_child()服务进程 ...
- python3 读取avro文件
官网示例文档:http://avro.apache.org/docs/current/gettingstartedpython.html#download_install 需要注意的是,官网给出的是p ...
- P1282 多米诺骨牌[可行性01背包]
题目来源:洛谷 题目描述 多米诺骨牌有上下2个方块组成,每个方块中有1~6个点.现有排成行的 上方块中点数之和记为S1,下方块中点数之和记为S2,它们的差为|S1-S2|.例如在图8-1中,S1=6+ ...
- Python+request 使用pymysql连接数据库mysql的操作《十》
使用指南.pymysql支持python2.7同时也支持python3.x.当前我用的是python2.7.所以过断选择了pymysql的使用,这里注意几点.一般我们连接数据库为了安全起见,都会要求按 ...
- BZOJ 2277 strongbox (gcd)
题意 有一个密码箱,0到n-1中的某些整数是它的密码. 且满足,如果a和b都是它的密码,那么(a+b)%n也是它的密码(a,b可以相等) 某人试了k次密码,前k-1次都失败了,最后一次成功了. 问:该 ...
- Nginx设置禁止通过IP访问服务器并且只能通过指定域名访问
为了避免别人把未备案的域名解析到自己的服务器IP而导致服务器被断网,需要在nginx上设置禁止通过IP访问服务器,只能通过域名访问. 最关键的一点是,在server的设置里面添加这么一行: liste ...

























