NHibernate利用Mindscape.NHibernateModelDesigner实现数据库与实体之间的转换及操作
2023-09-14 09:03:17 时间
nbsp nbsp在打开VS2010之后,我们可以在“工具”菜单下找到“扩展管理器,搜索:Mindscape NHibernate Model Designer 下载安装即可。安装完成后,在向项目中添加新项时如果我们拉到最下方我们会看到如下界面:
更加具体的操作可以参考:用好VS2010扩展管理器-NHibernate生成
HResult=-2146232832 Message=An exception occurred during configuration of persistence layer. Source=NHibernate StackTrace: 在 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.FileNotFoundException HResult=-2147024894 Message=未能找到文件“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:
//获取映射关系及配置 ISessionFactory sessionFactory = ConfigurationHelper.CreateConfiguration().Configure().BuildSessionFactory(); //此处新增 TbNHibernate entity = new TbNHibernate(); entity.UserName = "UserName1"; entity.UserPwd = "UserPwd1"; using (ISession session = sessionFactory.OpenSession()) var a = session.Save(entity); session.Flush(); catch (Exception ee) MessageBox.Show(ee.ToString()); //部分字段更新 using (ISession session = sessionFactory.OpenSession()) ITransaction trans = session.BeginTransaction(); 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(); }
[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类型的就可以了
nbsp nbsp此时通过实体操作数据是不需要填充主键字段的,你填充了也更新不进去。
nbsp nbsp本文中有什么不对的地方欢迎支出,谢谢
新建实体的字段不能够是数据库的关键字 1.在项目进行中,新建某个实体的时候,项目启动一直报错 Exception encountered during context initialization - cancelling refresh attempt: org.
相关文章
- 实现不同编程语言间的自由代码转换需要注意些什么?【经验分享】
- mysql 转换NULL数据方法详解数据库
- MySQL 逆向工程:从数据库到模型的可视化转换(mysql逆向工程)
- MySQL中将毫秒数转换为日期格式(mysql毫秒转日期)
- Oracle数据库查询列实现行转换(oracle查询列转行)
- Oracle数据库实现人民币大写转换功能(oracle金额大写)
- 换Oracle 脚本转换:轻松实现数据库迁移(oracle脚本转)
- Oracle数据库支持不同字符集的管理和转换(oracle不同字符集)
- Oracle数据库技巧:如何转换时间格式(oracle转时间格式)
- 数据库驱动:SQL Server 实现货币转换(sqlserver 货币)
- 实现mssql数据库编码转换的新方法(mssql编码转换)
- 实现CSV转换MySQL数据库的简单方法(csv转换成mysql)
- MySQL转换Oracle实现数据库跨平台迁移(hsql转换oracle)
- Oracle数据库中文汉字转换成全拼音(oracle中文转全拼音)
- Jquery时间验证和转换工具小例子
- android将图片转换存到数据库再从数据库读取转换成图片实现代码