Insert,Update,Delete操作
来源:互联网 发布:压力传感器连接单片机 编辑:程序博客网 时间:2024/04/26 16:49
Insert,Update,Delete操作
操作数据概述
我们常常说的一个工作单元,通常是执行1个或多个操作,对这些操作要么提交要么泛起/回滚。想想使用LINQ to SQL,一切的东西都在内存中操作,只有调用了DataContext.SubmitChanges()方法才把这些改变的数据提交到数据库中,LINQ to SQL那么提交要么回滚。
我们使用NHibernate也一样,如果只查询数据,不改变它的值,就不需要提交(或者回滚)到数据库。
1)新建对象
描述:新建一个对象;调用ISession.Save();同步ISession。
例子:在数据访问层编写CreateCustomer()方法,把传过来的Customer对象保存在数据库中。
Public int CreateCsutomer(Customer cutomer)
{
Int newid=(int)_session.Save(customer);
_session.Flush();
Return newid;
}
新建一个Customer对象,调用CreateCustomer()方法返回新插入的CustomerId,再次根据CustomerId查询数据库是否存在这个对象。
[Test]
Public void CreateCustomerTest()
{
Var customer=new Customer(){Firlstname=”young”,Lastname=”Y”};
Int newIdentity=_crud.CreateCustomer(customer);
Var testCustomer=_crud.GetCustomerById(newIdentity);
Assert.IsNotNull(testCusotmer);
}
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()方法删除,再次根据CustoerId查询书库是否存在这个对象。
[Test]
Public void DeleteCustomerTest()
{
Var coutomer=_cru.GetCustomerById(2);
_crud.DeleteCustomer(coutomer);
Var testCustomer=_crud.GetCustomerById(2);
Assert.IsNull(testCustomer);
}
3)更新对象
描述:获取一个对象;改变它的一些属性;调用ISession.Update();同步ISession。
例子:在数据访问层编写UpdateCustomer()方法,修改Customer对象。
Public void UpdateCustomer(Customer customer)
{
_session.Update(customer);
_session.Flush();
}
在数据库中查询CustomerId为1的Customer对象对象修改它的Firstname属性值,调用UpdatCustomer()方法更新,再次查询数据库中CustomerId为1的Csutomer对象的Firstname值为修改之后的值。
[Test]
Public void UpdateCustomerTest()
{
Var customer=_crud.GetCustomerById(1);
customer.Firstname=”Yyoung”;
_crud.UpdateCustomer(customer);
Var testCustomer=_crud.GetCustomerById(1);
Assert.AreEqual(“Yyoung”,customer.Firstname);
}
4)保存更新对象
ISession.SaveOrUpdate(object)方法完成如下工作:
l 检查这个对象是否已经存在Session中。
l 如果对象不在,调用Save(object)来保存。
l 如果对象存在,检查这个对象是否改变了。
l 如果对象改变,调用Update(object)来更新。
在数据访问层编写SaveOrUpdateCustomer()方法,保存更新Customer对象列表,一次遍历列表中Customer对象,调用ISession.SaveOrUpdate(object)方法保存更新每个Customer对象。
Public void SaveOrUpdateCustomer(IList<Customer>customer)
{
Foreach(var c in customer)
{
_session.SaveOtUpdate(c);
}
_session.Flush();
}
现在数据库中查询Firstname为young的Customer对象并修改它的Lastname属性值,这些对象是数据库中存在的,并改变了,然后新建2个Customer对象,这两个对象在数据库中不存在,是新建的。调用SaveOrUpdateCustomer()方法保存更新对象,即更新前面修改的对象和保存了后面新创建的2个对象。再次查询数据库中Firstname为young,Lastname为Y的Customer对象是否一致了。
[Test]
Public void SaveOrUpdateCustomerTest()
{
IList<Customer>customer=_crud.GetCustomersByFirstname(“young”);
Foreach(var c in customers)
{
c.Lastname=”Y”;
}
Var c1=new Customer(){Firstname=”young”,Lastname=”Y”};
Var c2=new Customer(){Firstname=”young”,Lastname=”Y”};
customers.Add(c1);
customers.Add(c2);
Int initiaIListCount=customers.Count;
_crid.SaveOrUpdateCustomer(customers);
Int testListCount=_crud.GetCustomersByFirstnameAndLastname(“young”,”Y”).Count;
Assert.AreEqual(initiaIListCount,testListCount);
}
在NHibernate中涉及了对象的状态,对象对一个特定的ISession来说,有三种状态分别是:瞬时对象(transient)、持久化对象(persistent)、游离对象(detached).
- Insert,Update,Delete操作
- LINQ Insert/Update/Delete操作
- 四、NHibernate之insert、delete、update操作
- 数据库操作优化(insert、update、delete、select)
- SQLite的insert、delete、update操作
- [C#] 数据库操作 - Insert, Read, Delete, Update
- [转载]QSqlQuery Select、Insert、Update、Delete操作
- hive0.14-insert、update、delete操作测试
- hive0.14-insert、update、delete操作测试
- hive0.14-insert、update、delete操作测
- 数据库操作优化(insert、update、delete、select)
- hive0.14-insert、update、delete操作测试
- MySQL表操作 insert-delete-update-select
- hive2.1.insert、update、delete操作测试
- 数据库操作语言:INSERT、UPDATE、LOAD、DELETE
- mysql的insert/replace/update/delete & insert,update,delete多表操作
- Insert Update Delete Select
- Insert , Update , Delete 触发器
- Android NDK 安装配置指南
- iPhone内存管理详细解说(二)
- Intent的FLAG_ACTIVITY_CLEAR_TOP和FLAG_ACTIVITY_REORDER_TO_FRONT
- Squid优化
- iPhone内存管理详细解说(一)
- Insert,Update,Delete操作
- 简单的awk
- 简单读request流代码
- 南阳理工 oj 图的邻接表dfs dfs 均可
- 网络中数据传输过程浅析
- 将40-200末位数为5的整数求和,要求在实现中要体现Linq技术
- kangle web 的常见问题收集和兼容性解决方案
- cocos2d-2.1rc0-x-2.1.2-hotfix win32 android环境搭建
- 第一次测试