NHibernate利用Mindscape.NHibernateModelDesigner实现数据库与实体之间的转换及操作
環(huán)境:
  Visual Studio 2010
一、Mindscape.NhibernateModelDesigner安裝
  在打開VS2010之后,我們能夠在“工具”菜單下找到“擴展管理器,搜索:Mindscape NHibernate Model Designer 下載安裝就可以。安裝完畢后,在向項目中加入新項時假設(shè)我們拉到最下方我們會看到例如以下界面:
更加詳細的操作能夠參考:用好VS2010擴展管理器-NHibernate生成
二、依據(jù)數(shù)據(jù)庫表結(jié)構(gòu)生成實體并通過實體進行操作
1、加入nhmodel實體
2、打開nhmodel實體,依據(jù)數(shù)據(jù)庫表生成實體
  左側(cè)工具欄部分切換到【server資源管理器】,連接上你想要獲取數(shù)據(jù)結(jié)構(gòu)的數(shù)據(jù)庫。就會看到展示出來的數(shù)據(jù)庫內(nèi)容:
  拖動你想要的表到設(shè)計器主界面。例如以下圖:
就可以獲取到數(shù)據(jù)庫表相應(yīng)的實體。
3、生成配置文件
小注:
  假設(shè)不生成配置文件直接執(zhí)行第4步中代碼,會報出以下的錯誤:
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、通過實體來操作數(shù)據(jù)庫:
//獲取映射關(guān)系及配置 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();}}}三、依據(jù)實體生成數(shù)據(jù)庫表結(jié)構(gòu)并通過實體進行操作
兩者之間的操作與之前一樣
小注:
  
1、假設(shè)在選擇主鍵生成方式的時候選擇了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
  假設(shè)在主鍵類型你選擇的是Guid
  那么此時。你實體類中的主鍵字段是Guid類型的,假設(shè)你通過Guid.NewGuid()給你主鍵字段賦值會報出例如以下錯誤:
  那么這樣的情況應(yīng)該處理呢?畢竟大多數(shù)的主鍵都是Guid類型的啊,此時須要改動你模型主鍵的生成規(guī)則:
在這里改動為guid類型的就能夠了
2、選擇主鍵的類型選擇int類型的時候:
  此時通過實體操作數(shù)據(jù)是不須要填充主鍵字段的,你填充了也更新不進去。
  本文中有什么不正確的地方歡迎支出,謝謝
四、[NHibernate操作文檔及demo]
(http://download.csdn.net/detail/xunzaosiyecao/9398186)
作者:jiankunking 出處:http://blog.csdn.net/jiankunking
轉(zhuǎn)載于:https://www.cnblogs.com/gavanwanggw/p/7263388.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的NHibernate利用Mindscape.NHibernateModelDesigner实现数据库与实体之间的转换及操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Java EE 7精粹》—— 第3章
- 下一篇: Python中面向对象的编程