NHibernate利用Mindscape.NHibernateModelDesigner实现数据库与实体之间的转换及操作

环境:
&nbsp&nbspVisual Studio 2010

一、Mindscape.NhibernateModelDesigner安装

&nbsp&nbsp在打开VS2010之后,我们能够在“工具”菜单下找到“扩展管理器,搜索:Mindscape NHibernate Model Designer 下载安装就可以。安装完毕后,在向项目中加入新项时假设我们拉到最下方我们会看到例如以下界面:
这里写图片描写叙述
更加详细的操作能够參考:用好VS2010扩展管理器-NHibernate生成

二、依据数据库表结构生成实体并通过实体进行操作

1、加入nhmodel实体

这里写图片描写叙述
这里写图片描写叙述
这里写图片描写叙述
这里写图片描写叙述
这里写图片描写叙述

2、打开nhmodel实体,依据数据库表生成实体

这里写图片描写叙述
这里写图片描写叙述
&nbsp&nbsp左側工具栏部分切换到【server资源管理器】,连接上你想要获取数据结构的数据库。就会看到展示出来的数据库内容:
这里写图片描写叙述
&nbsp&nbsp拖动你想要的表到设计器主界面。例如以下图:
这里写图片描写叙述
就可以获取到数据库表相应的实体。

3、生成配置文件

这里写图片描写叙述
这里写图片描写叙述
这里写图片描写叙述
这里写图片描写叙述
小注:
&nbsp&nbsp假设不生成配置文件直接执行第4步中代码,会报出以下的错误:

未处理 NHibernate.Cfg.HibernateConfigExceptionHResult=-2146232832Message=An exception occurred during configuration of persistence layer.Source=NHibernateStackTrace:在 NHibernate.Cfg.ConfigurationSchema.HibernateConfiguration..ctor(XmlReader hbConfigurationReader, Boolean fromAppSetting)在 NHibernate.Cfg.ConfigurationSchema.HibernateConfiguration..ctor(XmlReader hbConfigurationReader)在 NHibernate.Cfg.Configuration.Configure(XmlReader textReader)在 NHibernate.Cfg.Configuration.Configure(String fileName, Boolean ignoreSessionFactoryConfig)在 NHibernate.Cfg.Configuration.Configure(String fileName)在 NHibernate.Cfg.Configuration.Configure()在 DataBaseToEntity.ConfigurationHelper.CreateConfiguration() 位置 C:\Users\JianKunKing\Desktop\NHibernateStudy\NHibernateStudy\DataBaseToEntity\NHibernateModel1.cs:行号 20在 DataBaseToEntity.DataBaseToEntityForm1..ctor() 位置 C:\Users\JianKunKing\Desktop\NHibernateStudy\NHibernateStudy\DataBaseToEntity\DataBaseToEntityForm1.cs:行号 20在 DataBaseToEntity.Program.Main() 位置 C:\Users\JianKunKing\Desktop\NHibernateStudy\NHibernateStudy\DataBaseToEntity\Program.cs:行号 18在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)在 System.Threading.ThreadHelper.ThreadStart()InnerException: System.IO.FileNotFoundExceptionHResult=-2147024894Message=未能找到文件“C:\Users\JianKunKing\Desktop\NHibernateStudy\NHibernateStudy\DataBaseToEntity\bin\Debug\hibernate.cfg.xml”。

Source=mscorlib FileName=C:\Users\JianKunKing\Desktop\NHibernateStudy\NHibernateStudy\DataBaseToEntity\bin\Debug\hibernate.cfg.xml StackTrace: 在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 在 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 在 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize) 在 System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy) 在 System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn) 在 System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver) 在 System.Threading.CompressedStack.runTryCode(Object userData) 在 System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData) 在 System.Threading.CompressedStack.Run(CompressedStack compressedStack, ContextCallback callback, Object state) 在 System.Xml.XmlTextReaderImpl.OpenUrl() 在 System.Xml.XmlTextReaderImpl.Read() 在 System.Xml.XmlTextReader.Read() 在 System.Xml.XmlCharCheckingReader.Read() 在 System.Xml.XsdValidatingReader.Read() 在 System.Xml.XPath.XPathDocument.LoadFromReader(XmlReader reader, XmlSpace space) 在 System.Xml.XPath.XPathDocument..ctor(XmlReader reader, XmlSpace space) 在 System.Xml.XPath.XPathDocument..ctor(XmlReader reader) 在 NHibernate.Cfg.ConfigurationSchema.HibernateConfiguration..ctor(XmlReader hbConfigurationReader, Boolean fromAppSetting) InnerException:

4、通过实体来操作数据库:

//获取映射关系及配置
ISessionFactory sessionFactory = ConfigurationHelper.CreateConfiguration().Configure().BuildSessionFactory();
//此处新增
TbNHibernate entity = new TbNHibernate();entity.UserName = "UserName1";entity.UserPwd = "UserPwd1";using (ISession session = sessionFactory.OpenSession()){try{var a = session.Save(entity);session.Flush();}catch (Exception ee){MessageBox.Show(ee.ToString());}}
//部分字段更新
using (ISession session = sessionFactory.OpenSession()){ITransaction trans = session.BeginTransaction();try{string sql = " update tb_NHibernate set userPWD=" + value + " where id='" + id + "'";ISQLQuery Query = session.CreateSQLQuery(sql).AddEntity(typeof(TbNHibernate));Query.ExecuteUpdate();session.Flush();trans.Commit();}catch (Exception ex){MessageBox.Show(ex.ToString());IsSuccess = false;trans.Rollback();}finally{if (session != null){session.Clear();}}}

三、依据实体生成数据库表结构并通过实体进行操作

这里写图片描写叙述
两者之间的操作与之前一样
小注:
&nbsp&nbsp

1、假设在选择主键生成方式的时候选择了HiLo选项

,那么生成表的主键字段是uniqueidentifier类型的:

CREATE TABLE [dbo].[DataBaseToEntity1](
[Id] [uniqueidentifier] NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[Code] [nvarchar](max) NOT NULL,
PRIMARY KEY CLUSTERED 
(
[Id] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

这里写图片描写叙述
&nbsp&nbsp假设在主键类型你选择的是Guid
这里写图片描写叙述
&nbsp&nbsp那么此时。你实体类中的主键字段是Guid类型的,假设你通过Guid.NewGuid()给你主键字段赋值会报出例如以下错误:

------------------------------------------------------
NHibernate.HibernateException: error performing isolated work ---> System.FormatException: GUID 应包括带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。在 System.Guid.TryParseGuidWithNoStyle(String guidString, GuidResult& result)在 System.Guid.TryParseGuid(String g, GuidStyles flags, GuidResult& result)在 System.Guid..ctor(String g)在 NHibernate.Type.GuidType.Get(IDataReader rs, Int32 index)在 NHibernate.Id.TableGenerator.DoWorkInCurrentTransaction(ISessionImplementor session, IDbConnection conn, IDbTransaction transaction在 NHibernate.Engine.TransactionHelper.Work.DoWork(IDbConnection connection, IDbTransaction transaction)在 NHibernate.Transaction.AdoNetTransactionFactory.ExecuteWorkInIsolation(ISessionImplementor session, IIsolatedWork work, Boolean transacted)--- 内部异常堆栈跟踪的结尾 ---在 NHibernate.Transaction.AdoNetTransactionFactory.ExecuteWorkInIsolation(ISessionImplementor session, IIsolatedWork work, Boolean transacted)在 NHibernate.Transaction.AdoNetWithDistributedTransactionFactory.ExecuteWorkInIsolation(ISessionImplementor session, IIsolatedWork work, Boolean transacted)在 NHibernate.Engine.Transaction.Isolater.DoIsolatedWork(IIsolatedWork work, ISessionImplementor session)在 NHibernate.Engine.TransactionHelper.DoWorkInNewTransaction(ISessionImplementor session)在 NHibernate.Id.TableGenerator.Generate(ISessionImplementor session, Object obj)在 NHibernate.Id.TableHiLoGenerator.Generate(ISessionImplementor session, Object obj)在 NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)在 NHibernate.Event.Default.DefaultSaveEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)在 NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event)在 NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)在 NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)在 NHibernate.Impl.SessionImpl.Save(Object obj)在 DataBaseToEntity.DataBaseToEntityForm1.button1_Click(Object sender, EventArgs e) 位置 C:\Users\JianKunKing\Desktop\NHibernateStudy\NHibernateStudy\DataBaseToEntity\DataBaseToEntityForm1.cs:行号 31
---------------------------
确定   
---------------------------

&nbsp&nbsp那么这样的情况应该处理呢?毕竟大多数的主键都是Guid类型的啊,此时须要改动你模型主键的生成规则:
这里写图片描写叙述
在这里改动为guid类型的就能够了

2、选择主键的类型选择int类型的时候:

这里写图片描写叙述
&nbsp&nbsp此时通过实体操作数据是不须要填充主键字段的,你填充了也更新不进去。
这里写图片描写叙述
&nbsp&nbsp本文中有什么不正确的地方欢迎支出,谢谢

四、[NHibernate操作文档及demo]

(http://download.csdn.net/detail/xunzaosiyecao/9398186)

作者:jiankunking 出处:http://blog.csdn.net/jiankunking

转载于:https://www.cnblogs.com/gavanwanggw/p/7263388.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540847.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树1 树的同构_检查树是否同构

树1 树的同构Problem statement: 问题陈述: Write a function to detect if two trees are isomorphic. Two trees are called isomorphic if one of them can be obtained from other by a series of flips, i.e. by swapping left and right children of a numbe…

《SEO的艺术(原书第2版)》——第1章 搜索:反映认知、连接商务

第1章 搜索:反映认知、连接商务 搜索已经与当今的社会融为一体。截至2011年8月,全球每个月执行的搜索超过了1580亿次,每天大约执行52亿次。这意味着,每秒平均要执行大约61 000次搜索。此外,用户对搜索查询返回的期望时…

android 动态contextmenu,在Android中使用ContextMenu与ListView

要从选定的ListView项中获取该项,请参考ContextMenuInfo对象(请参见下面的最后一个实现方法)。完整解决方案如下:1)在ListActivity类中为上下文菜单注册ListViewOverridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstance…

《Android应用开发攻略》——2.2 异常处理

2.2 异常处理 Ian Darwin2.2.1 问题Java有一个精心定义的异常处理机制,但是需要花费一定的时间学习,才能高效地使用而不至于使用户或者技术支持人员感到沮丧。2.2.2 解决方案Java提供了一个Exception层次结构,正确地使用它能够带来相当大的灵…

android 默认浏览器 视频播放 二维码,Android调用系统默认浏览器访问的方法

一、启动android默认浏览器这样子,android就可以调用起手机默认的浏览器访问。二、指定相应的浏览器访问1、指定android自带的浏览器访问( “com.android.browser”:packagename ;“com.android.browser.BrowserActivity”:启动主…

请写出3个Android布局,一起撸一波干货集中营练练手Android(三)布局+实现篇

MPGankIO 布局篇整个App到了这里就开始准备开始实现逻辑啦,有没有点小期待后续如果有需要可以爬一波包包通缉令的数据O(∩_∩)O~~我们的布局采用5.0之后的新布局控件1.CardViewCardView特别的属性如下:android:cardCornerRadius:在布局中设置…

小米净水器压力传感器_净水器中RO的完整形式是什么?

小米净水器压力传感器RO:反渗透 (RO: Reverse Osmosis) RO is an abbreviation of Reverse Osmosis. It is a course of action that aids the RO water purifier to banish unfavorable ions, dissolved solids, and TDS from the water. Reverse osmosis is the c…

即时通讯应用战争开打,到底谁能最终定义我们的交流方式?

题图:风靡亚洲的Line 北京时间4月4日消息,据科技网站TechRadar报道,对业界来说,即时通讯应用是一个巨大的市场,除了专门发力该领域的公司,专注搜索的谷歌和专注社交的Facebook最近几年也都开始深耕此类应用…

离散点自动生成等高线_有限自动机| 离散数学

离散点自动生成等高线有限状态机 (Finite state machine) A finite state machine (FSM) is similar to a finite state automation (FSA) except that the finite state machine "prints" an output using an output alphabet distinct from the input alphabet. Th…

android点击加号,Android仿微信朋友圈点击加号添加图片功能

本文为大家分享了类似微信朋友圈,点击号图片,可以加图片功能,供大家参考,具体内容如下xml:xmlns:app"http://schemas.android.com/apk/res-auto"android:layout_width"match_parent"android:layout_height&qu…

AI 创业公司 Kyndi 获850万美元融资,帮助公司预测未来

雷锋网(公众号:雷锋网)8月10日消息,据外媒报道, Kyndi 是一家总部位于帕洛阿尔托的 AI 创业公司。该公司今天宣布,已经完成了850万美元的 B 轮融资。 本轮融资的资金来源包括 PivotNorth Capital,Darling Ventures 和 …

css max-width_CSS中的max-width属性

css max-widthCSS | 最大宽度属性 (CSS | max-width property) The max-width property is used to help in setting the width of an element to the maximum. Although if the element or content is already larger than the maximum width then the height of that content…

20个编写现代CSS代码的建议

本文翻译自Danny Markov 的20-Tips-For-Writing-Modern-CSS一文。 本文归纳于笔者的Web Frontend Introduction And Best Practices:前端入门与最佳实践中CSS入门与最佳实践系列,其他的关于CSS样式指南的还有提升你的CSS姿势、Facebook里是怎样提升CSS代码质量的。本…

android package.xml,Android自动化编译设置AndroidManifest.xml中package值(包名)

手动修改Android的AndroidManifest.xml中package值(包名)很简单,手动修改即可。但是项目中需要把Android的项目源代码放到服务器端在客户下载时候动态编译生成,且生成的app签名相同但包名不同(若此时包名相同就是相同的app),这种需求需要在服…

css 相同的css属性_CSS中的order属性

css 相同的css属性CSS | 订单属性 (CSS | order Property) Introduction: 介绍: Web development is an ever-growing field that would never find its end, therefore it is equally necessary to learn new ways to deal with the elements of the web page or …

StoreServ的ASIC架构师必须面向未来做出决断

StoreServ阵列采用特殊硬件,即一套ASIC来加速存储阵列操作,而且其每代阵列都会在这方面进行重新设计。目前的设计为第五代。 作为惠普企业业务公司研究员兼StoreServ架构师,Siamak Nazari当下主要负责第六代ASIC的设计工作。 每代ASIC设计往往…

android网页省略分页器,Android轻量级网页风格分页器

博客同步自:个人博客主页轻量级仿网页风格分页器,和RecycleView封装一起配合使用,也可单独使用,喜欢就star、fork下吧~谢谢目录功能介绍效果图如何引入简单使用依赖github地址功能介绍支持延迟加载分页支持单独分页器组件使用&…

scala重载无参构造方法_Scala中的无参数方法

scala重载无参构造方法Scala无参数方法 (Scala parameterless method) A method which accepts no parameters from the calling code. It also denotes that there will not be any empty parentheses. These are special types of methods in Scala that are initialized and…

传统存储做到极致也惊人!看宏杉科技发布的CloudSAN

传统存储阵列首先考虑的是高可靠、高性能。那么在成本上、扩展上、部署上就差。 互联网企业带来分布式存储,扩展上、部署上是优势了,但是单节点的可靠性差、数据一致性差、IO延迟大、空间浪费严重,能耗大。 这两者的问题,我想很多…

android inflate,Android 关于inflate

通俗的说,inflate就相当于将一个xml中定义的布局找出来.因为在一个Activity里如果直接用findViewById()的话,对应的是setConentView()的那个layout里的组件.因此如果你的Activity里如果用到别的layout,比如对话框上的layout,你还要设置对话框上的layout里的组件(像图片ImageVie…