想了解什么是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 />
&nbsp;密 码:<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论坛地址:

http://www.newlifex.com/

大石头博客:

http://www.cnblogs.com/nnhy/

NewLife.XCode开发资源目录

http://www.cnblogs.com/asxinyu/archive/2012/06/02/2532210.html

NewLife.XCode 上手指南的更多相关文章

  1. NewLife.XCode 上手指南2018版(二)增

    目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...

  2. NewLife.XCode 上手指南2018版(一)代码生成

    目录 NewLife.XCode 上手指南2018版(一)代码生成 NewLife.XCode 上手指南2018版(二)增 NewLife.XCode 上手指南2018版(三)查 NewLife.XC ...

  3. Rancher 快速上手指南操作(1)

    Rancher 快速上手指南操作(1)该指南知道用户如何快速的部署Rancher Server 管理容器.前提是假设你的机器已经安装好docker了.1 确认 docker 的版本,下面是 ubunt ...

  4. 【原创】Newlife.XCode的常见功能使用(一)查询与数据初始化

            本博客所有文章分类的总目录:http://www.cnblogs.com/asxinyu/p/4288836.html Newlife XCode组件相关文章目录:http://www ...

  5. 【目录】Newlife XCode组件相关文章目录

    本博客所有文章分类的总目录链接:本博客博文总目录-实时更新  1.Newlife XCode组件相关文章目录  1.Newlife XCode组件资源目录汇总[2013年版]    2.Newlife ...

  6. X下轻量级桌面WindowMaker上手指南

    layout: post title: 轻量级桌面WindowMaker上手指南 tags: x11, cygwin, raspi --- 最近工作上需要在远程Linux上运行一个桌面(我需要跑Net ...

  7. UnityShader快速上手指南(三)

    简介 这一篇还是一些基本的shader操作:裁剪.透明和法向量的应用 (纠结了很久写不写这些,因为代码很简单,主要是些概念上的东西) 先来看下大概的效果图:(从左到右依次是裁剪,透明,加了法向量的透明 ...

  8. Windows 8 系统完全上手指南 - 非常详尽的 Win8 系统入门学习手册与使用技巧专题教程!

    每次当有新版本的操作系统发布的时候,市面上总会冒出各种从入门到精通类的学习书籍,这次最新的 Windows 8 也不例外!不过,今天给大家送上免费的大礼——<Windows 8 完全上手指南&g ...

  9. Resharper上手指南

    原文http://www.cnblogs.com/renji/archive/2007/12/11/resharper.html Resharper上手指南 我是visual studio的忠实用户, ...

随机推荐

  1. RT-Thread--线程间通信

    线程中通信 在裸机编程中,经常会使用全局变量进行功能间的通信,如某些功能可能由于一些操作而改变全局变量的值,另一个功能对此全局变量进行读取,根据读取到的全局变量值执行相应的动作,达到通信协作的目的: ...

  2. frp服务搭建

    安装命令 C wget --no-check-certificate https://raw.githubusercontent.com/clangcn/onekey-install-shell/ma ...

  3. Java程序员完美设置,Mac编程指南

        重装了不知道多少次Windows,Linux发行版换来换去总是觉得不满意,终于下定决心在年头买了人生中第一台Mac. 为什么是Mac 现在的移动端.服务器端跑的大多数都是Unix系统,熟悉Un ...

  4. 【转】Python源码学习Schedule

    原文:https://www.cnblogs.com/angrycode/p/11433283.html ----------------------------------------------- ...

  5. Cookie、Session、Token那点事儿和前后端分离之JWT用户认证

    (两篇文章转自:https://www.jianshu.com/p/bd1be47a16c1:https://www.jianshu.com/p/180a870a308a) 什么是Cookie? Co ...

  6. JS 导出网页中Table内容到excel

    <html> <head> <script type="text/javascript" language="javascript" ...

  7. SQL server 中rowcount与@@rowcount 的使用

    rowcount的用法: rowcount的作用就是用来限定后面的sql在返回指定的行数之后便停止处理,比如下面的示例,set rowcount 10select * from 表A 这样的查询只会返 ...

  8. JAVA的循环结构进阶

    1.什么是二重循环:                        一个循环体内又包含另一个完整的循环结构                     语法:                       ...

  9. 18 | 为什么这些SQL语句逻辑相同,性能却差异巨大?

    在MySQL中,有很多看上去逻辑相同,但性能却差异巨大的SQL语句.对这些语句使用不当的话,就会不经意间导致整个数据库的压力变大. 我今天挑选了三个这样的案例和你分享.希望再遇到相似的问题时,你可以做 ...

  10. jsp中submit的连接属性是什么?

    把注册的按钮改成button:<form action="dologin.jsp" method="post">用户<input type=& ...