NHibernate in Action(第一章1.2)
1.2 .NET中的持久化方法
- 手工编写代码
- DataSets
- LINQ-to-SQL
- NHibernate(或其它类似的)
- ADO.NET Entity Framework
1.2.1 选择持久层
另外,只需一点工作就可以开始了。但是你如果你需要控制其他东西就必须手写代码了,这是经常发生的(在1.3节将会介绍)。
OpenNHibernateSession();
session.Save(item);
CloseNHibernateSession();
}
ADO.NET ENTITY FRAMEWORK
有明显的优势。
回过来看拍卖系统这个例子,假设需要的实体有:User,Item和Bid。除了他们包含的数据之外,你还希望他们之间有一些关系。例如,一个Item包含了一个Bid集合,一个Bid有与一个Item管理。在C#的类中,他可以用item.Bids这样一个集合表示,用biid.Item这样的属性表示。面向对象的视图不同于关系视图,它没有主外键,只有关联关系。面向对象同时也提供了一些强大的模型概念,比如继承和多台。
但是他们编码起来非常繁琐和困难。考虑到我们必须使用手工编写继承于其它实体的持久层实体,通常会使用代码生成或者一些基类(例如DataSet)来尽量减少添加功能的工作量。这些功能可能关系到一些持久层,交互或者信息的表现。所以如果没有一个有用的框架,这些功能将会花费很多时间来实现。
DataSet中的实体
NHibernate中的实体
对象与关系数据之间有几个主要的不同点。如果试图将这两者一起使用的话将会产生范式失配(也叫做对象关系阻抗失配impedance mismatch).我们在1.3节将探讨这种适配。在本章的结尾,你将会对导致范式匹配的原因及NHibernate如何解决这个问题有一个清晰的概念。
微软已经为大部分.NET控件添加了对DataSet数据绑定的支持。它能够很容易的将DataSet绑定到控件上,以便于显示信息和DataSet的变化(用户触发)做出响应。
同样,当你处理一些边缘问题,比如一些复杂的报表的时候,不要忘记你还是可以使用回DataSet的,DataSet在这方面维护起来更加简单。事实上,在编码过程中,很少有报表工具能够很好的支持实体绑定,所以DataSet可以说是你的最佳选择。我们会在第九章讨论这个问题。
手写的CRUD操作可以确切的执行你想要的东西,因为执行了自己编写的SQL语句---但是这仍然是非常繁琐的工作。所以有必要引进一个框架来生成这些SQL语句。一旦你知道加载一个实体就是从数据库中执行一个SELECT语句,你就可以自动生成这些原始的CRUD操作。但是对于一些复杂的查询和关联实体,你就必须编写更多代码来实现。
你知道大多数持久层都可以使用DataSet来生成。这写持久层包含了一些执行CRUD操作的类。同时VS 2005和.NET2.0也提供了更加强大的类:TableAdapters。
LINQ to SQL的CRUD操作
现在我们已经降到了大部分的持久化步骤和操作,同时我们也探索了NHibernate的一些高级功能。
转载于:https://www.cnblogs.com/coolkiss/archive/2010/02/10/1667029.html
NHibernate in Action(第一章1.2)相关推荐
- Solr in Action 第一章翻译(待整理)
Solr in action读书笔记第一篇第一章 第1章 Solr简介 本章速览: ·搜索引擎处理的数据特性 ·常见搜索引擎用例 ·Solr核心模块介绍 ·选择Solr的理由 ·功能概述 ...
- SEAM IN ACTION 第一章
Part 1 Teeing off with Seam 开球 Many excellent frameworks exist to support the development of webbase ...
- mondrian in action 第一章翻译 (主要用百度翻译完成,稍加整理)
本章涵盖 基于数据库的报告的复杂性a OLAP报告工具的优势 用蒙德里安的原因 业务分析是一个基于历史数据分析来深入了解业务绩效的过程.传统上,用于业务分析的工具非常昂贵,难以维护.相比之下,蒙德里安 ...
- NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译
NHibernate.3.0.Cookbook第一章第六节Handling versioning and concurrency的翻译 第一章第二节Mapping a class with XML第一 ...
- 《Gans in Action》第一章 对抗神经网络介绍
此为<Gans in Action>(对抗神经网络实战)第一章读书笔记 Chapter 1. Introduction to GANs 对抗神经网络介绍 This chapter cove ...
- spring in action学习-第一章 spring之旅
首先我先吐槽一下这本书的封面图,我能理解成一个包着头巾的男人举着个水壶昂首挺胸,最后给你个眼神....开玩笑的这幅插图是约旦西南部卡拉克省的居民,那里的山顶有座城堡,对死海和平原有极佳的视野,这幅图出 ...
- ASP.NET MVC 3 Framework之旅 第一章
第一章 伟大的思想 ASP.NET MVC是来自于微软的整合了有效性的和整洁的模式-视图-控制器(MVC)架构的一种Web开发框架,它的最新的思想和技术来自于敏捷性开发,是最好的ASP.NET平台.A ...
- Android项目驱动式开发教程 第2版,《Android项目驱动式开发教程》第一章开发入门.ppt...
<Android项目驱动式开发教程>第一章开发入门 1.4 项目框架分析 4 android:versionName="1.0" > 5 8 第9行代码andro ...
- jBPM3.12用户指南中文翻译----第一章 绪论
这是Jboss 的jBPM3.12框架的用户指南的中文翻译.其中第一章的译文,是我在网上找到的.其他几章都是我自己做的翻译.我的翻译是中英文对照,只翻译部分我认为重要的,不翻译简单的英文,以免浪费你我 ...
最新文章
- 好消息:Sci-Hub解封了!可以看2021新文献了!附可用网址
- 共享单车取消月卡优惠 烧钱时代正式结束
- opencv-python将一个视频切成n份视频
- python 获取 程序运行时间
- Educational Codeforces Round 8 D. Magic Numbers 数位DP
- SQL server连接到服务器,无法连接到 (local)。在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Se
- 计算机组成与系统原理中的节拍是什么意思?
- θ Some 与 θ All 子查询
- whea_uncorrectable_error蓝屏代码
- 关于南宁市教育云网站的网课视频链接blob加密破解
- 数字化赋能全零售 国美按下战略加速键
- AMD Fluid Motion Video补帧教程
- 臀部无论大小,翘起才是王道。
- Depsolving loop limit reached
- 非专业python学多久_非的解释|非的意思|汉典“非”字的基本解释
- [windows优化]win10折腾过程
- Delphi 获取菜单高度、标题栏高度、边框高度函数GetSystemMetrics
- AudioPlayer-简易音频播放器
- matlab实现TE/TM偏振布拉格反射镜
- 谷歌竞价推广Google Ads如何自己开户?
热门文章
- 【题解】 小莫踩蘑菇
- Google Earth Engine python ——从谷歌地球引擎(GEE)上的点提取栅格值的实现
- 自媒体搞笑领域怎么做?这几个类型都很热门,可以尝试
- 手把手看如何制作本地yun源
- 压缩视频的软件有哪些?最好用的视频压缩软件是哪款?
- 查杀新rundl132.exe病毒的过程
- 四位“计算机之父”之争
- 苹果手机充值显示服务器繁忙,iTunes充值常见错误和解决方法
- 软件实习项目2——贪吃喵(猫吃鱼版贪吃蛇)(实验准备与设计)
- ar71xx php-fpm,ar71xx和ar93xx平台所有8M固件!!nwan,aria2,qos,samba,tr,cpulimit-ng,等等...