1. 程式人生 > >微型ORM:MiniPoco

微型ORM:MiniPoco

MiniPoco是一款適用於.Net 和Oracle的微小、快速的ORM。



MiniPoco有以下特色:

  • 微小,沒有依賴項……單個的C#檔案可以方便的新增到任何專案中。
  • 工作於嚴格的沒有裝飾的MiniPoco類
  • 基於Oracle.ManagedDataAccess.dll開發,無需安裝Oracle客戶端
  • Insert/Delete/Update/Save 等幫助方法。
  • 自動生成表結構SQL語句
  • 分頁支援:自動得到總行數和資料
  • 支援簡單的事務
  • 更好的支援引數替換,包括從物件屬性中抓取命名的引數。

可以從這裡獲得MiniPoco:

  • CSDN:http://download.csdn.net/detail/qq243348167/9516256

程式碼展示:

首先,定義一個類:

    
[Table("ks_User", Display = "人員資訊")]
    public class UserInfo
    {
        [Column(IsPrimaryKey = true, IsDbGenerated = false)]
        public Int32 ID { get; set; }
        [Column]
        [StringLength(30)]
        [Display("姓名")]
        public string UserName { get; set; }
        [Column]
        [Display("密碼")]
        public string Password { get; set; }
        [Column]
        [Display("性別")]
        public Boolean Sex { get; set; }
        [Column]
        [Display("建立日期")]
        public DateTime CreateDate { get; set; }
    }

接下來,建立一個MiniPoco.Database,來執行查詢:

    
using (MiniPoco.Database db = new MiniPoco.Database())
{
<span style="white-space:pre">	</span>var list = db.Query<userinfo>("select t.* from ks_User t");   
	foreach (var items in list)
	{
		Console.WriteLine(items.UserName);
	}
}

獲取分頁資料:

    
using (MiniPoco.Database db = new MiniPoco.Database())
{
	int total = 0;
	var list = db.GetPageList<userinfo>("select t.* from ks_User t where t.username like @0 order by id", 2, 15, out total, "%text%");
	Console.WriteLine(total);
	foreach (var items in list)
	{
		Console.WriteLine(items.UserName);
	}
}

Inserts、Updates 和 Delete。

MiniPoco提供了insert、update和delete操作的幫助。


新增記錄

    
using (MiniPoco.Database db = new MiniPoco.Database())
{
	UserInfo user = new UserInfo();
	user.ID = 1;
	user.UserName = "text1";
	user.Sex = true;
	user.CreateDate = DateTime.Now;
	db.Insert<userinfo>(user);
	db.Save();
}

更新記錄

<userinfo>
using (MiniPoco.Database db = new MiniPoco.Database())
{
	UserInfo user = new UserInfo();
	user.ID = 1;
	user.UserName = "text2";
	user.Sex = true;
	db.Update<userinfo>(user);
	db.Save();
}

刪除記錄

<userinfo><userinfo>
using (MiniPoco.Database db = new MiniPoco.Database())
{
	UserInfo user = new UserInfo();
	user.ID = 1;
	db.Delete<userinfo>(user);
	db.Save();
}

批量新增

<userinfo><userinfo>
using (MiniPoco.Database db = new MiniPoco.Database(DB))
{
	Console.WriteLine(DateTime.Now);
	for (int i = 0; i < 10000; i++)
	{
		UserInfo user = new UserInfo();
		user.ID = i + 1;
		user.UserName = "text" + i;
		user.Sex = true;
		user.CreateDate = DateTime.Now;
		db.Insert<userinfo>(user);
		if (i % 1000 == 0)
		{
			Console.WriteLine(i);
			db.Save();
		}
	}
	Console.WriteLine(DateTime.Now);
}

執行儲存過程

<userinfo><userinfo>
using (MiniPoco.Database db = new MiniPoco.Database())
{
	//執行儲存過程返回資料集
	db.QueryParameter<object>("exec 包名.儲存過程名稱 key", new MiniPoco.Parameter("key", "value", MiniPoco.Mapping.PocoDbType.String));
	//執行儲存過程沒有返回
	db.ExecuteParameter("exec 包名.儲存過程名稱 key", new MiniPoco.Parameter("key", "value", MiniPoco.Mapping.PocoDbType.String));
}

幫助生成表結構SQL語句

使用OracleHelper幫助類
string sql = MiniPoco.OracleHelper.GetCreateTable<userinfo>();
sql 輸出結果
<userinfo><userinfo>create table ks_User (
ID NUMBER(32,0),
UserName  VARCHAR2(30),
Password  VARCHAR2(20),
Sex NUMBER(3,0),
CreateDate DATE
);
comment on table ks_User
is '人員資訊';
comment on column ks_User.UserName
is '姓名';
comment on column ks_User.Password
is '密碼';
comment on column ks_User.Sex
is '性別';
comment on column ks_User.CreateDate
is '建立日期';
 alter table ks_User
add constraint PK_ks_User_ID primary key (ID)