petapoco mysql_PetaPoco初体验

更新NuGet

VS2010自带了NuGet,但是版本可能不是最新的(我的就不是)。 首先把NuGet升级到最新版本。

打开《扩展管理器》

在左侧的手风琴菜单中选中《更新》

0a28552d354caeb470056c61a9666eaf.png

如上图,这种情况就是需要更新《NuGet Package Manager》。 如果没有出现,则说明你的《NuGet》已经是最新的了(前提是你是VS2010),直接进入下一章吧。

点击《更新》,然后按操作进行就ok了。

安装PetaPoco 4.0.3

PetaPoco C#微型ORM框架,基本无需配置,仅由单个cs文件构成,支持.net3.5 .net4.0。

官方还出品了配套的T4模板用来自动生成数据库Models。 官方网站

截稿时PetaPoco的官方最新版本为5.0.1。我不采用5.0.1版本,因为我用的是.net3.5,而5.0.1的版本中用到了一个类System.Tuple,这个类是从.net4.0才开始有的。(当然也可以自己实现这个类,不过像我这样的初学者还是算了吧)。

经过google我决定使用4.0.3的版本。 这时遇到了一个问题:

NuGet图形界面中默认列出的只有最新版本,一装就是5.0.1。

再次google,找到《NuGet 安装旧版本库》的方法。那就是使用NuGet命令行。

依次打开《工具》《库程序包管理器》《程序包管理器控制台》

3c37ab0c9fe72fca4959b6e85a1f59dd.png

敲入命令对可用的版本进行查询get-package –listavailable –allversion –filter petapoco,如图

fb8415d4059501a794fa3fb4397ac966.png

我要使用的是petapoco 4.0.3这一个,如图

353bd7499ce4e5c5da2bb5745363f7a3.png

敲入命令进行安装install-package petapoco –version 4.0.3,如图

中间弹出对话框,直接确定,如果之后报错直接无视就行了。

c709287dd3886d0d993b4f49e68f8531.png

将当前焦点窗口转移回控制台。如下图输出,表示安装成功。

156c735f37abba61c5100fed81fa7baf.png

上图中的《acoms》是我当前的项目,安装的时候默认要有一个打开的项目的Web的桌面的都可以。

PetaPoco的安装结束。

配置PetaPoco

现在又遇到一个问题,使用Ctrl+Shift+B编译项目的时候报错,说dynamic神马的不存在。

8d36f12991d16612af4ea65d8a2d92dc.png 这是因为Dynamic也是.net4.0的。PetaPoco官方提供了一个编译时的选项来开启&关闭对dynamic的支持。

下面来进行编译选项的设置:

在项目上《右键》《属性》

选择左侧tab的第二项《生成》,在《条件编译符号》中输入PETAPOCO_NO_DYNAMIC

b92d8dd2a118f8e0c17273787b6ecf4c.png

保存,再次Ctrl+Shift+B,进行编译。这次就OK了。

配置PetaPoco T4模板

我用PetaPoco是为了操作数据库方便,能自动生成与数据库表一一对应的Model当然更方便了。 我使用的数据库是mysql,以下示例为针对mysql的版本,其他版本自行修改相应配置。

数据库名:ptest

数据表两张:porder,puser

在程序的配置文件(web.config或app.config)中增加节点类似

然后打开Database.tt文件

6403e2cc2826c292331774c9bc7e67a3.png

进行如图修改(其中的SchemaName是原来没有,新增的,并且是必填的,其他几个随意)

af14fd1bf7b82abbbce32f935c68e7db.png

保存文件。选中《Database.tt》《右键》《运行自定义工具》如图,如果弹窗,则确定。

bb5bb6edb039d2bbcffb0ff5b4a79a89.png

运行结束后输出信息如下(0个错误,警告无视之)。

a9c7d536ab5d951b050152b4452fe57e.png

此时查看Database.cs

4164a439b2e039ec959703ee8d18d8d8.png 自动生成了5个类: porder,puser是和我的数据库表对应的。DBUtils,IFactory,Record这三个是工具类。

搞定。下一步是是怎么使用这些代码了。

PetaPoco使用示例

以下代码是针对由上述T4模板生成的model进行的。自己定义的model可能不具备其中的一些方法。

Porder数据表及类属性如下

CREATE TABLE `porder` (

order_id int(11) NOT NULL auto_increment,

totalprice varchar(20) NOT NULL,

coupons varchar(20) default NULL,

ordername varchar(20) NOT null,

createtime datetime NOT NULL,

PRIMARY KEY (order_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

[TableName("porder")]

[PrimaryKey("order_id")]

[ExplicitColumns]

public partial class porder : DBUtils.Record {

[Column]

public int order_id {

get { return _order_id; }

set { _order_id = value; MarkColumnModified("order_id"); }

}

int _order_id;

[Column]

public string totalprice {

get { return _totalprice; }

set { _totalprice = value; MarkColumnModified("totalprice"); }

}

string _totalprice;

[Column]

public string coupons {

get { return _coupons; }

set { _coupons = value; MarkColumnModified("coupons"); }

}

string _coupons;

[Column]

public string ordername {

get { return _ordername; }

set { _ordername = value; MarkColumnModified("ordername"); }

}

string _ordername;

[Column]

public DateTime createtime {

get { return _createtime; }

set { _createtime = value; MarkColumnModified("createtime"); }

}

DateTime _createtime;

}

Puser数据库表及类属性如下

CREATE TABLE puser (

user_id int(11) NOT NULL auto_increment,

username varchar(20) NOT NULL,

password varchar(20) NOT NULL,

email varchar(50) NOT NULL,

createtime datetime NOT NULL,

PRIMARY KEY (user_id)

) ENGINE=InnoDB DEFAULT CHARSET=utf8

[TableName("puser")]

[PrimaryKey("user_id")]

[ExplicitColumns]

public partial class puser : DBUtils.Record {

[Column]

public int user_id {

get { return _user_id; }

set { _user_id = value; MarkColumnModified("user_id"); }

}

int _user_id;

[Column] public string username {

get { return _username; }

set { _username = value; MarkColumnModified("username"); }

}

string _username;

[Column]

public string password {

get { return _password; }

set { _password = value; MarkColumnModified("password"); }

}

string _password;

[Column]

public string email {

get { return _email; }

set { _email = value; MarkColumnModified("email"); }

}

tring _email;

[Column]

public DateTime createtime {

get { return _createtime; }

set { _createtime = value; MarkColumnModified("createtime"); }

}

DateTime _createtime;

}

增删改查

增加 var db = DBUtils.GetInstance();

db.BeginTransaction();

puser a = new puser();

a.username = "first user";

a.password = "first password";

a.email = "first@first.com";

a.createtime = DateTime.Now;

db.Insert(a); //a.Insert(); [/csharp]

删除 db.Execute("delete from puser");

db.Execute("delete from porder");

事务(mysql要使用InnoDB) var db = DBUtils.GetInstance();

db.BeginTransaction();

try {

// operations

db.CompleteTransaction();

}

catch (Exception e) {

db.AbortTransaction();

Console.WriteLine(e.StackTrace);

}

使用部分类扩展model

为puser增加一个额外的属性myorder namespace models {

public partial class puser {

public porder myorder { set; get; }

}

}

使某些属性不参与ORM [PetaPoco.Ignore]

public porder myorder {

set;

get;

}

获取单个model

获取单个long值 long count = db.ExecuteScalar("SELECT Count(*) FROM puser");

Console.WriteLine("puser count " + count);

获取puser列表 foreach (puser one in db.Query ("select * from puser")) {

Console.WriteLine("{0} - {1} - {2}", one.user_id, one.username, one.password);

}

Console.WriteLine("-----------------");

foreach (var one in db.Query ("select * from porder")) {

Console.WriteLine("{0} - {1} - {2}", one.order_id, one.ordername, one.totalprice);

}

获取多个model

同时获取puser和poder对象,先使用上述3,4,给puser增加myorder属性。 foreach (puser one in

db.Query ("select * from puser left join porder on email=ordername ")) {

Console.WriteLine("{0} - {1} - {2}",one.username,one.password,one.myorder.ordername);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值