环境:
&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

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

  1. mysql数据库实体_关系型数据库中实体之间的关系

    关系型数据库实体间有三种关联关系:一对一,一对多,多对多. 一对一关系(1:1): 如果实体集(表)A 中的每一个实休(就是每行记录),在实体集B中只有一条数据与它对应, 反之实体集B 中的每一个实体 ...

  2. 处理实体与Map<String,Object>、json之间的转换

    处理实体与map,json之间的转换 实体与Map 实体与Map<String,Object>的转换 直接看代码,如下: package com.liu;import java.lang. ...

  3. dao和mysql映射_hibernate通过数据库生成实体类,映射文件和DAO(实用)

    hibernate通过数据库生成实体类,映射文件和DAO(实用) (2011-04-06 17:22:32) 标签: 杂谈 上次谈到利用MyEclipse从数据库反向生成实体类之JPA方式,这次我们来 ...

  4. mysql实体指的是_数据库中,实体是指( )。

    [简答题]名词解释: 黑色金属.有色金属. 重金属.轻金属.贵金属.稀有金属 [单选题]下列关于数据模型中实体间联系的描述正确的是( ). [简答题]计算机控制理论主要有哪几方面? [单选题]With ...

  5. 数据库、实体-数据库设计原则-by小雨

    这两天笔者几篇文章介绍了改数据库.实体-的文章. 联关文章的地址 1. 原始据单与实体之间的关系 可是以一对一.一对多.多对多的关系.在一般情况下,它们是一对一的关系:即一张原始据单对应且只对应一个实 ...

  6. 技术图文:如何利用 C# 向 Access 数据库插入大量数据?

    背景 通常我们在做数据分析与处理之前,需要把从网站爬取的数据或者从 甲方 系统中导出的数据存入到自己的数据库中.如果数据量小,直接利用 SQL的 Insert 语句逐条插入就好.可是数据量上万条之后, ...

  7. Case Study: 利用PHP获取关系型数据库中多张数据表的数据

    一.目标 该笔记的目的是引导读者借助WampServer平台和MySQL数据库,利用HTML/CSS/JS/PHP设计一个多数据表关联的网页.在上一个案例(Case Study: 利用JS实现数据库网 ...

  8. mysql 常用小工具包_mssql+mysql小工具(无需环境依赖)-mysql数据库批量实体CS类导出工具下载v3.0免费版-西西软件下载...

    mysql数据库批量实体CS类导出工具是一个功能简单的数据库小工具,可以选中数据表执行查询,以及自定义sql语句,查询或者执行增删改,可以查看目标服务器对应数据库以及表和字段信息,不需要单独安装mys ...

  9. MyBatis Plus——忽略某个实体类属性和数据库表字段之间的映射关系

    问题描述 在开发中可能会遇到MyBatis-Plus使用实体类属性进行SQL操作,但是不用存到数据库中去查找,这时候我们的实体中有这个属性,但是数据库的表中没有这个字段(即:实体类属性非数据库表字段) ...

最新文章

  1. Mysql从5.0升级到 5.1.73
  2. Qt连接数据库的方法
  3. jzoj6293-迷宫【ddp,线段树,矩阵乘法】
  4. C++:20---类模板(template)
  5. C#中(int),int.Parse,int.TryParse,Convert.ToInt32四则之间的用法
  6. JDBC粗略学习( 阿巴阿巴阿巴阿巴)
  7. 阶梯剖视图_*小星推荐*—模具图纸剖视图的种类及画法,你学到了吗?
  8. mac和jar的关系
  9. View Controller Programming Guide for iOS---(三)---Using View Controllers in Your App
  10. 华为android phone 驱动,Huawei 手机 驱动程序下载——更新 Huawei 软件
  11. 奔图 Pantum P3502DN 打印机驱动
  12. 自建自用的微信推送服务
  13. Python 学习资源大全中文版
  14. 美国最受欢迎的婴儿名字:女孩Sophia和男孩Liam
  15. 什么是SaaS,PaaS和IaaS? 有例子
  16. 了解并掌握Halcon HDevelop 仿真程序语法
  17. 【VPP】 VPP之DPO
  18. Android职业规划
  19. Locale 和 LanguageTag
  20. L1与L2分别服从什么分布?

热门文章

  1. 电脑生成siri语音_Siri for Mac:苹果电脑也有语音助手
  2. php抽象方法db,PHP笔记之抽象方法抽象类
  3. php多个表中查找数据_HeidiSQL 免费的可视化数据库管理工具
  4. django项目如何连接前端_工作笔记前端小白如何搭建前端项目
  5. linux sd卡读写出错,linux系统SD卡读写问题
  6. python三引号解析_[宜配屋]听图阁
  7. 串灯控制盒去掉怎么接_单双向可控硅好坏怎么判断
  8. idea html 错误提示,Idea 代码编辑错误不飘红提示
  9. 4个空格和一个tab有什么区别_火花塞为什么一换就是4个?只换一个不行吗?
  10. 揭示C语言函数调用的本质解析