商讯信箱
用户名: @
密  码:   注册|忘记密码
登录
个人用户经销商
信箱 E杂志
您的位置:首页 > 技术频道 > 正文

NHibernate Step by Step(二) 单表操作

作者:abluedog  2007-04-03

在其中,我们可以发现:


2006-04-15 13:52:13,093 [AdpaterExeMgrThread1] DEBUG NHibernate.SQL [(null)] - SELECT person0_.id as id0_, person0_.name as name0_ FROM Person person0_ WHERE person0_.id=@p0

2006-04-15 13:52:13,093 [AdpaterExeMgrThread1] DEBUG NHibernate.SQL [(null)] - @p0 = '1'


对了,就是这里,
NHibernate替我们构造了一条sql语句,并添加一个参数,然后将我们在代码中赋的id1来填充,这样,一条完整的可以执行的sql语句产生了。

请注意:在产生sql语句的前面,NHibernate构造了一个IDBCommand,然后在sql语句产生完全后,获取连接,通过一个DataReader来填充Persion对象给我们使用,这就是NHibernate替我们做的事,是不是很简单啊?(真的很简单吗??看看源代码吧!!)

请仔细研究输出的日志。
如法炮制,我们添加另外3Test,完成单个表的全部CRUD操作,如下完整代码:

 

[TestMethod]

        
public void TestCreate()

        
{

            Person person 
= new Person();

            person.Name 
= "Jackie Chan";

 

            ITransaction trans 
= session.BeginTransaction();

            
try

            
{

                session.Save(person);

                trans.Commit();

                Assert.IsTrue(person.Id 
> 0);

            }


            
catch (Exception ex)

            
{

                trans.Rollback();

                Assert.Fail(ex.Message);

            }


        }


 

        [TestMethod]

        
public void TestUpdate()

        
{

            Person person 
= (Person)session.Get(typeof(Person), 1);

            person.Name 
= "Jet Li";

 

            ITransaction trans 
= session.BeginTransaction();

            
try

            
{

                session.Save(person);

                trans.Commit();

                Assert.IsTrue(person.Name 
== "Jet Li");

            }


            
catch (Exception ex)

            
{

                trans.Rollback();

                Assert.Fail(ex.Message);

            }


        }


 

        [TestMethod]

        
public void TestRead()

        
{

            Person person 
= (Person)session.Get(typeof(Person), 1);

            Assert.IsTrue(person.Name 
== "Jackie Chan");

        }


 

        [TestMethod]

        
public void TestDelete()

        
{

            Person person 
= (Person)session.Get(typeof(Person), 1);

 

            ITransaction trans 
= session.BeginTransaction();

            
try

            
{

                session.Delete(person);

                trans.Commit();

            }


            
catch (Exception ex)

            
{

                trans.Rollback();

                Assert.Fail(ex.Message);

            }


        }


 Delete的方法如下:

void Delete(object obj);

直接传入需要delete的对象即可。
好了,基本的操作都完成了,是不是很Easy?
好了,这一篇就讲这么多,我们下次再接着练习。

1 2 3 4
【内容导航】
第1页: 第1页 第2页: 第2页
第3页: 第3页 第4页: 第4页
©版权所有。未经许可,不得转载。
[责任编辑:晓徐]