NHibernate之旅(5):探索Insert,Update,Delete操作

本节内容

操作数据概述

1.新建对象

2.删除对象

3.更新对象

4.保存更新对象

结语

操作数据概述

我们常常所说的一个工作单元,通常是执行1个或多个操作,对这些操作要么提交要么放弃/回滚。想想使用LINQ to SQL,一切的东西都在内存中操作,只有调用了DataContext.SubmitChanges()方法才把这些改变的数据提交到数据库中,LINQ to SQL那么提交要么回滚。

我们使用NHibernate也一样,如果只查询数据,不改变它的值,就不需要提交(或者回滚)到数据库。

注意:这节,我们在上一节源代码的基础上,在数据访问层中新建CRUD.cs类用于编写操作方法,在数据访问的测试层新建一CRUDFixture.cs类用于测试。

1.新建对象

简单描述:新建一个对象;调用ISession.Save();同步ISession。

例子:在数据访问层编写CreateCustomer()方法,把传过来的Customer对象保存在数据库中。

public int CreateCustomer(Customer customer)
{
  int newid = (int)_session.Save(customer);
  _session.Flush();
  return newid;
}

我们测试这个方法,新建一个Customer对象,调用CreateCustomer()方法返回新插入的CustomerId,再次根据CustomerId查询数据库是否存在这个对象。

[Test]
public void CreateCustomerTest()
{
  var customer = new Customer() { Firstname = "YJing", Lastname = "Lee" };
  int newIdentity = _crud.CreateCustomer(customer);
  var testCustomer = _crud.GetCustomerById(newIdentity);
  Assert.IsNotNull(testCustomer);
}

2.删除对象

简单描述:获取一个对象;调用ISession.Delete();同步ISession。

说明:使用ISession.Delete()会把对象的状态从数据库中移除。当然,你的应用程序可能仍然持有一个指向它的引用。所以,最好这样理解:Delete()的用途是把一个持久化实例变成临时实例。 你也可以通过传递给Delete()一个NHibernate 查询字符串来一次性删除很多对象。删除对象顺序没有要求,不会引发外键约束冲突。当然,有可能引发在外键字段定义的NOT NULL约束冲突。

例子:在数据访问层编写DeleteCustomer()方法,从数据库中删除Customer对象。

public void DeleteCustomer(Customer customer)
{
  _session.Delete(customer);
  _session.Flush();
}

我们测试这个方法,在数据库中查询CustomerId为2的Customer对象,调用DeleteCustomer()方法删除,再次根据CustomerId查询数据库是否存在这个对象。

[Test]
public void DeleteCustomerTest()
{
  var coutomer = _crud.GetCustomerById(2);
  _crud.DeleteCustomer(coutomer);
  var testCustomer = _crud.GetCustomerById(2);
  Assert.IsNull(testCustomer);
}

时间: 2024-10-29 05:45:53

NHibernate之旅(5):探索Insert,Update,Delete操作的相关文章

LINQ体验(9)——LINQ to SQL语句之Insert/Update/Delete操作

我们继续讲解LINQ to SQL语句,这篇我们来讨论Insert/Update/Delete操作 .这个在我们的程序中最为常用了.我们直接看例子. Insert/Update/Delete操作插入(Insert)1.简单形式 说明:new一个 对象,使用InsertOnSubmit方法将其加入到对应的集合中,使用SubmitChanges ()提交到数据库. NorthwindDataContext db = new NorthwindDataContext(); var newCustome

简述SQL SERVER触发器内INSERT,UPDATE,DELETE的三种状态

一个触发器内三种INSERT,UPDATE,DELETE状态 CREATE   TRIGGER   tr_T_A   ON     T_A   for   INSERT,UPDATE,DELETE        如IF   exists   (select   *   from   inserted)   and   not   exists   (select   *   from   deleted)   则为   INSERT  如IF   exists(select   *   from

asp access insert update delete 使用

本教程是一篇asp入门篇的初级教程了,主要是讲asp access insert update delete 简单的使用哦,好了下面我们把它们写在一个函数里面然后再举例说明. Function add_del_update(tablename,str,id) Select Case str  Case "insert":    sql="select * from ["&tablename&"] where id=null"   

SQL Server触发器insert update delete示例

·只有inserted表有数据时,当前操作为insert: ·inserted和deleted两张表都有数据时,当前操作为update: ·只有deleted表有数据时,当前操作为delete. 创建触发器用 CREATE TRIGGER  代码如下 复制代码 CREATE TRIGGER 触发器名称 ON 表名 FOR INSERT.UPDATE 或 DELETE AS nserted.deleted 这是两个虚拟表,inserted 保存的是 insert 或 update 之后所影响的记录

数据库-oracle通过审计功能监控数据insert update等操作

问题描述 oracle通过审计功能监控数据insert update等操作 我想在后台开启oracle的审计功能,监控前台对数据库内容的修改.也就是在前台执行某个操作,然后查看对哪个数据库表做insert.update等操作了,了解前台操作对应后台哪张数据库表. 请问怎么开通,我看到的都是只能开通特定表的审计.

MySQL 4.1.0 中文参考手册 --- 6.4 数据操纵:SELECT, INSERT, UPDATE, DELETE

mysql|select|参考|参考手册|数据|中文 MySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译 MySQL Reference Manual for version 4.1.0-alpha. 6.4 数据操纵:SELECT, INSERT, UPDATE, DELETE6.4.1 SELECT 句法 SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACH

根据表名自动生成INSERT,UPDATE,DELETE,SELECT的SQL语句

select|语句 TBPROC CREATE Procedure TbProc@model varchar(2),@pagename varchar(32),@object varchar(32),@autoField varchar(32)=nullasset nocount onselect @model=upper(@model)select @pagename=lower(@pagename)select @object=upper(@object)declare @head varc

在PHPLIB中的MYSQL类中加INSERT,UPDATE,DELETE等函数

<?php/* * Session Management for PHP3 * * Copyright (c) 1998-2000 NetUSE AG *                    Boris Erdmann, Kristian Koehntopp * * $Id: db_mysql.inc,v 1.2 2000/07/12 18:22:34 kk Exp $ * */ class DB_Sql {    /* public: connection parameters */  va

ado.net数据操作全接触一(insert,update,delete)

ado|数据 1.1创建数据库连接(sqlserver)1: <%@ Import Namespace="System.Data" %>2: <%@ Import NameSpace="System.Data.SqlClient" %>3: <%4: Dim myConnection As SqlConnection5: myConnection = New SqlConnection( "server=localhost;d