日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

NHibernateLinq简单的CRUD操作

發(fā)布時(shí)間:2025/7/14 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 NHibernateLinq简单的CRUD操作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

????? 因?yàn)樽罱谧鲆恍┯嘘P(guān)數(shù)據(jù)庫(kù)方面的開(kāi)發(fā),其實(shí),說(shuō)白了,就是對(duì)數(shù)據(jù)庫(kù)的CRUD操作,寫(xiě)了n多的存儲(chǔ)過(guò)程,倒不是說(shuō)存儲(chǔ)過(guò)程多難,關(guān)鍵是在后期的維護(hù)方面有點(diǎn)頭疼,沒(méi)辦法,研究一下ORM吧。

????? 下面分別是用NHibernate和Linq實(shí)現(xiàn)的簡(jiǎn)單的CRUD操作,當(dāng)是一開(kāi)始的練練手(開(kāi)關(guān)環(huán)境:VS08+SQL2000)。

?????? ①:NHibernate

???????不管三七二十一,先看看實(shí)體類(lèi)吧。(數(shù)據(jù)庫(kù)代碼省略,映射文件對(duì)應(yīng)著表結(jié)構(gòu))??

代碼 ????public?class?User
????{
????????
#region?構(gòu)造函數(shù)
????????
///?<summary>
????????
///?用戶信息
????????
///?</summary>
????????public?User()?{?}
????????
#endregion

????????
#region?屬性

????????
private?int?userID;
????????
///?<summary>
????????
///?用戶ID
????????
///?</summary>
????????public?virtual?int?UserID
????????{
????????????
get
????????????{
????????????????
return?userID;
????????????}
????????????
set
????????????{
????????????????userID?
=?value;
????????????}
????????}

????????
private?string?userName;
????????
///?<summary>
????????
///?用戶姓名
????????
///?</summary>
????????public?virtual?string?UserName
????????{
????????????
get
????????????{
????????????????
return?userName;
????????????}
????????????
set
????????????{
????????????????userName?
=?value;
????????????}
????????}

????????
private?string?userPwd;
????????
///?<summary>
????????
///?用戶密碼
????????
///?</summary>
????????public?virtual?string?UserPwd
????????{
????????????
get
????????????{
????????????????
return?userPwd;
????????????}
????????????
set
????????????{
????????????????userPwd?
=?value;
????????????}
????????}

????????
private?int?userAge;
????????
///?<summary>
????????
///?用戶年齡
????????
///?</summary>
????????public?virtual?int?UserAge
????????{
????????????
get
????????????{
????????????????
return?userAge;
????????????}
????????????
set
????????????{
????????????????userAge?
=?value;
????????????}
????????}
????????
#endregion
????}

?

????? 這里用的NHibernate是NHibernate-2.1.2.GA-bin,映射文件如下(注意映射文件中nh的版本號(hào)):

代碼 <?xml?version="1.0"?encoding="utf-8"??>
<hibernate-mapping?xmlns="urn:nhibernate-mapping-2.2"?>
??
<class?name="NHUser.User,NHUser"?table="UserInfo">?//NHUser為命名空間、UserInfo為數(shù)據(jù)表名
????
<id?name="UserID"?type="Int32"?unsaved-value="null">
??????
<column?name="UserID"?length="4"?sql-type="int"?not-null="true"?unique="true"?index="PK_UserInfo"/>
??????
<generator?class="native"/>
????
</id>
????
<property?name="UserName"?type="String">
??????
<column?name="UserName"?length="50"?sql-type="nvarchar"?not-null="false"/>
????
</property>
????
<property?name="UserPwd"?type="String">
??????
<column?name="UserPwd"?length="50"?sql-type="nvarchar"?not-null="false"/>
????
</property>
????
<property?name="UserAge"?type="Int32">
??????
<column?name="UserAge"?length="4"?sql-type="int"?/>
????
</property>
??
</class>
</hibernate-mapping>

?

????? 基本工作還剩下個(gè)配置文件hibernate.cfg.xml

代碼 <?xml?version="1.0"?encoding="utf-8"??>
<hibernate-configuration?xmlns="urn:nhibernate-configuration-2.2">
??
<session-factory>
????
<property?name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
????
<property?name="connection.connection_string">Server=localhost;uid=sa;pwd=123456;database=NunitUser;Integrated?Security=SSPI</property>
????
<property?name="dialect">NHibernate.Dialect.MsSql2000Dialect</property>
????
<property?name="adonet.batch_size">100</property>
????
<property?name='proxyfactory.factory_class'>
??????NHibernate.ByteCode.Castle.ProxyFactoryFactory,NHibernate.ByteCode.Castle
????
</property>
????
<mapping?assembly="NHUser"/>
??
</session-factory>
</hibernate-configuration>

?

????? OK!準(zhǔn)備工作over了,下面看看CRUD的操作代碼吧

代碼 namespace?NHUser
{
????
public?partial?class?NHCRUD?:?Form
????{
????????
public?NHCRUD()
????????{
????????????InitializeComponent();
????????}

????????
private?void?btnOK_Click(object?sender,?EventArgs?e)
????????{
????????????
try
????????????{
????????????????
string?username?=?this.tbUserName.Text.ToString();
????????????????
string?userpwd?=?this.tbUserPwd.Text.ToString();
????????????????
int?userage?=?Convert.ToInt32(this.tbUserAge.Text.ToString());

????????????????
//定義配置文件
????????????????Configuration?cfg?=?new?Configuration();
????????????????cfg.Configure();

????????????????
//創(chuàng)建會(huì)話工廠
????????????????ISessionFactory?factory?=?cfg.BuildSessionFactory();
????????????????ISession?session?
=?factory.OpenSession();
????????????????
//用戶賦值
??????????????? User?user?=?new?User();
????????????????user.UserName?
=?username;
????????????????user.UserPwd?
=?userpwd;
????????????????user.UserAge?
=?userage;

????????????????
//開(kāi)啟事務(wù)
????????????????ITransaction?trans?=?session.BeginTransaction();
????????????????
try
????????????????{
????????????????????session.Save(user);
????????????????????//Commit
????????????????????trans.Commit();
????????????????????MessageBox.Show(
"用戶數(shù)據(jù)插入成功!",?"系統(tǒng)提示!");
????????????????????
this.Close();
????????????????}
????????????????
catch?(Exception?ex)
????????????????{
????????????????????trans.Rollback();
????????????????????MessageBox.Show(
"用戶數(shù)據(jù)插入失敗!"?+?ex.Message,?"系統(tǒng)提示!");
????????????????}
????????????}
????????????
catch?(Exception?ex)
????????????{
????????????????MessageBox.Show(ex.Message,?
"錯(cuò)誤提示!");
????????????}
????????}

????????
///?<summary>
????????
///?查詢指定數(shù)據(jù)
????????
///?</summary>
????????private?void?btnRead_Click(object?sender,?EventArgs?e)
????????{
????????????
//定義配置文件
????????????Configuration?cfg?=?new?Configuration();
??????????? cfg.Configure();
????????????
//創(chuàng)建會(huì)話工廠
????????????ISessionFactory?factory?=?cfg.BuildSessionFactory();
????????????
using?(ISession?session?=?factory.OpenSession())
????????????{
????????????????IList?users?
=?session.CreateCriteria(typeof(User)).Add(Expression.Eq("UserName",?"dukeyongwang")).List();

????????????????
foreach?(User?user?in?users)
????????????????{
????????????????????Console.WriteLine(
"UserID:"?+?user.UserID?+?"——>UserName:"?+?user.UserName?+?"——>UserPwd:"?+?user.UserPwd?+?"——>UserAge:"?+?user.UserAge);
????????????????}
????????????}
????????}

????????
///?<summary>
????????
///?修改
????????
///?</summary>
????????private?void?btnUpdate_Click(object?sender,?EventArgs?e)
????????{
????????????
//定義配置文件
????????????Configuration?cfg?=?new?Configuration();
????????????cfg.Configure();
????????????
//創(chuàng)建會(huì)話工廠
????????????ISessionFactory?factory?=?cfg.BuildSessionFactory();

????????????
try
????????????{
????????????????
using?(ISession?session?=?factory.OpenSession())
????????????????{
????????????????????User?user?
=?session.Load(typeof(User),?5)?as?User;

????????????????????Console.WriteLine(
"修改前==>>UserID:"?+?user.UserID?+?"——>UserName:"?+?user.UserName?+?"——>UserPwd:"?+?user.UserPwd?+?"——>UserAge:"?+?user.UserAge);

????????????????????user.UserName?
=?"dukeyongwang";
????????????????????user.UserPwd?
=?"dkwang";
????????????????????user.UserAge?
=?25;

????????????????????
using?(ITransaction?trans?=?session.BeginTransaction())
????????????????????{
????????????????????????session.Update(user,?user.UserID);

????????????????????????User?updateUser?
=?session.Load(typeof(User),?user.UserID)?as?User;

????????????????????????
//修改后
????????????????????????Console.WriteLine("修改后==>>UserID:"?+?updateUser.UserID?+?"——>UserName:"?+?updateUser.UserName?+?"——>UserPwd:"?+?updateUser.UserPwd?+?"——>UserAge:"?+?updateUser.UserAge);

????????????????????????trans.Commit();
????????????????????}
????????????????}
????????????}
????????????
catch?(Exception?ex)
????????????{
????????????????MessageBox.Show(
"修改時(shí)錯(cuò)誤:"?+?ex.Message,?"錯(cuò)誤提示!");
????????????}
????????}


????????
///?<summary>
????????
///?刪除(可通過(guò)查詢出來(lái)的實(shí)體對(duì)象,然后刪除)
????????
///?</summary>
????????private?void?btnDel_Click(object?sender,?EventArgs?e)
????????{
???????????
//定義配置文件
????????????Configuration?cfg?=?new?Configuration();
???????????cfg.Configure();
???????????
//創(chuàng)建會(huì)話工廠
????????????ISessionFactory?factory?=?cfg.BuildSessionFactory();

????????????
using?(ISession?session?=?factory.OpenSession())
????????????{
????????????????
using?(ITransaction?trans?=?session.BeginTransaction())
????????????????{
????????????????????User?newUser?
=?session.Load(typeof(User),?6)?as?User;
????????????????????
//刪除
????????????????????session.Delete(newUser);
????????????????????
????????????????????trans.Commit();
????????????????}
????????????}
????????}
????}
}

?

???? 運(yùn)行以上代碼,就可以實(shí)現(xiàn)數(shù)據(jù)的CRUD,感覺(jué)沒(méi)有SQL,代碼清爽了許多。呵呵。。。。

???? ②:Linq

???? 在linq中少了NHibernate的映射文件,這部分實(shí)現(xiàn)在實(shí)體類(lèi)中通過(guò)TableAttribute和ColumnAttribute實(shí)現(xiàn),少建一個(gè)xml文件,也許你會(huì)說(shuō),現(xiàn)在的映射文件可以自動(dòng)生成,好吧,我承認(rèn)的確是可以。

代碼 [Table(Name="UserInfo")]
????
public?class?User
????{
????????
private?int?userID;
????????
///?<summary>
????????
///?用戶ID
????????
///?</summary>
????????[Column(DbType="int",IsPrimaryKey=true,IsDbGenerated=true)]
????????
public?int?UserID
????????{
????????????
get
????????????{
????????????????
return?userID;
????????????}
????????????
set
????????????{
????????????????userID?
=?value;
????????????}
????????}

????????
private?string?userName;
????????
///?<summary>
????????
///?用戶姓名
????????
///?</summary>
????????[Column(DbType="nvarchar(50)")]
????????
public?string?UserName
????????{
????????????
get
????????????{
????????????????
return?userName;
????????????}
????????????
set
????????????{
????????????????userName?
=?value;
????????????}
????????}

????????
private?string?userPwd;
????????
///?<summary>
????????
///?用戶密碼
????????
///?</summary>
????????[Column(DbType="nvarchar(50)")]
????????
public?string?UserPwd
????????{
????????????
get
????????????{
????????????????
return?userPwd;
????????????}
????????????
set
????????????{
????????????????userPwd?
=?value;
????????????}
????????}

????????
private?int?userAge;
????????
///?<summary>
????????
///?用戶年齡
????????
///?</summary>
????????[Column(DbType="int")]
????????
public?int?UserAge
????????{
????????????
get
????????????{
????????????????
return?userAge;
????????????}
????????????
set
????????????{
????????????????userAge?
=?value;
????????????}
????????}
????}

?

??? 好了,現(xiàn)在就可以看看在LINQ中如何完成CRUD的操作:

代碼 namespace?LinqUser
{
????
public?partial?class?LinqCRUD?:?Form
????{
????????//映射實(shí)體 ????????DataContext?objContext?=?null;

????????
public?LinqCRUD()
????????{
????????????InitializeComponent();
????????????
string?strConnection?=?"Server=localhost;uid=sa;pwd=123456;database=NunitUser;Integrated?Security=SSPI";
????????????objContext?
=?new?DataContext(strConnection);
????????}

????????
#region?數(shù)據(jù)CRUD
????????
///?<summary>
????????
///?數(shù)據(jù)插入
????????
///?</summary>
????????private?void?btnCreate_Click(object?sender,?EventArgs?e)
????????{
????????????
try
????????????{
????????????????
string?userName?=?this.tbUserName.Text.ToString();
????????????????
string?userPwd?=?this.tbUserPwd.Text.ToString();
????????????????
int?userAge?=?Convert.ToInt32(this.tbUserAge.Text.ToString());

????????????????User?user?
=?new?User();
????????????????user.UserName?
=?userName;
????????????????user.UserPwd?
=?userPwd;
????????????????user.UserAge?
=?userAge;
????????????????
????????????????
//插入
????????????????objContext.GetTable<User>().InsertOnSubmit(user);
????????????????
//提交
????????????????objContext.SubmitChanges();

????????????????MessageBox.Show(
"插入數(shù)據(jù)成功!",?"系統(tǒng)提示!");
????????????}
????????????
catch?(Exception?ex)
????????????{
????????????????MessageBox.Show(
"插入數(shù)據(jù)時(shí)錯(cuò)誤:"?+?ex.Message,?"系統(tǒng)提示!");
????????????}
????????}

????????
///?<summary>
????????
///?數(shù)據(jù)修改
????????
///?</summary>
????????private?void?btnUpdate_Click(object?sender,?EventArgs?e)
????????{
????????????
try
????????????{
????????????????var?myUpdate?
=?from?user?in?objContext.GetTable<User>()
???????????????????????????????
where?user.UserID?==?1
???????????????????????????????select?user;
????????????????User?userUpdate?
=?myUpdate.First<User>()?as?User;
????????????????
if?(null?==?userUpdate)?return;
????????????????userUpdate.UserName?
=?this.tbUserName.Text.ToString();
????????????????userUpdate.UserPwd?
=?this.tbUserPwd.Text.ToString();
????????????????userUpdate.UserAge?
=?Convert.ToInt32(this.tbUserAge.Text.ToString());

????????????????
//提交
????????????????objContext.SubmitChanges();

????????????????MessageBox.Show(
"修改數(shù)據(jù)成功!",?"系統(tǒng)提示!");
????????????}
????????????
catch?(Exception?ex)
????????????{
????????????????MessageBox.Show(
"修改數(shù)據(jù)時(shí)錯(cuò)誤:"?+?ex.Message,?"系統(tǒng)提示!");
????????????}
????????}

????????
///?<summary>
????????
///?數(shù)據(jù)刪除
????????
///?</summary>
????????private?void?btnDel_Click(object?sender,?EventArgs?e)
????????{
????????????
try
????????????{
????????????????var?myDel?
=?from?user?in?objContext.GetTable<User>()
????????????????????????????
where?user.UserID?==?1
????????????????????????????select?user;
????????????????User?userDel?
=?myDel.First<User>();
????????????????
if?(null?==?userDel)?return;

????????????????
//刪除
????????????????objContext.GetTable<User>().DeleteOnSubmit(userDel);

????????????????
//提交
????????????????objContext.SubmitChanges();

????????????????MessageBox.Show(
"刪除數(shù)據(jù)成功!",?"系統(tǒng)提示!");
????????????}
????????????
catch?(Exception?ex)
????????????{
????????????????MessageBox.Show(
"刪除數(shù)據(jù)時(shí)出錯(cuò):"?+?ex.Message,?"系統(tǒng)提示!");
????????????}
????????}

????????
///?<summary>
????????
///?數(shù)據(jù)查詢
????????
///?</summary>
????????private?void?btnRead_Click(object?sender,?EventArgs?e)
????????{
????????????
try
????????????{
????????????????var?myQuery?
=?from?user?in?objContext.GetTable<User>()
??????????????????????????????
where?user.UserID?==?1
??????????????????????????????select?user;

????????????????
if?(myQuery.Count<User>()?<=?0)?return;

????????????????
foreach?(User?user?in?myQuery)
????????????????{
????????????????????Console.WriteLine(
"用戶信息:UserID——>"?+?user.UserID?+?"、UserName——>"?+?user.UserName?+?"、UserPwd——>"?+?user.UserPwd?+?"、UserAge——>"?+?user.UserAge);
????????????????}

????????????????MessageBox.Show(
"查詢數(shù)據(jù)成功!",?"系統(tǒng)提示!");

????????????}
????????????
catch?(Exception?ex)
????????????{
????????????????MessageBox.Show(
"查詢數(shù)據(jù)時(shí)錯(cuò)誤:"?+?ex.Message,?"系統(tǒng)提示!");
????????????}
????????}
????????
#endregion
????}
}

?

??? ? 到這里,LINQ的操作也結(jié)束了。運(yùn)行感受一下吧。

????? 先說(shuō)說(shuō)我的感受吧,用NHibernate明顯感覺(jué)到效率沒(méi)有原生的SQL語(yǔ)句的好,可能只是插入一條語(yǔ)句,沒(méi)有批量的處理,Linq反而沒(méi)感覺(jué)到比NHibernate效率低。如果是對(duì)數(shù)據(jù)庫(kù)操作的實(shí)時(shí)性要求很高的話,可能不太適合使用ORM技術(shù),當(dāng)然了,才接觸到這些東西,也許有其它的解決辦法也說(shuō)不定,待自己慢慢研究吧!!

轉(zhuǎn)載于:https://www.cnblogs.com/wangyong/archive/2010/06/02/1749993.html

總結(jié)

以上是生活随笔為你收集整理的NHibernateLinq简单的CRUD操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。