【问题标题】:NHibernate save error w/i databaseNHibernate 保存错误 w/i 数据库
【发布时间】:2009-04-22 01:51:51
【问题描述】:

我在一个有很多孩子的 NHibernate 对象上调用 Save 附在它上面。保存后,NHibernate 有时会发生错误 开始插入我的 sql 数据库(“数据被截断,而 从一种数据类型转换为另一种数据类型。”例如)。 是示例异常的顶行。 NHibernate 从来没有告诉过我更多……它失败了。我的问题是,如何确定哪个表/列是我保存错误的罪魁祸首?

在 System.Data.SqlServerCe.SqlCeCommand.ProcessResults(Int32 小时) 在 System.Data.SqlServerCe.SqlCeCommand.ExecuteCommandText(IntPtr& pCursor, Boolean & isBaseTableCursor) 在 System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand (CommandBehavior 行为、String 方法、ResultSetOptions 选项) 在 System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery() 在 NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery(IDbCommand 命令) 在 NHibernate.Id.Insert.AbstractSelectingDelegate.PerformInsert (SqlCommandInfo insertSQL, ISessionImplementor session, IBinder 粘合剂) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象 [] 字段,Boolean[] notNull,SqlCommandInfo sql,Object obj, ISessionImplementor 会话) 在 NHibernate.Persister.Entity.AbstractEntityPersister.Insert(对象 [] 字段,对象 obj,ISessionImplementor 会话) 在 NHibernate.Action.EntityIdentityInsertAction.Execute()

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    问题是错误发生在 SqlServerCe 库中。所以 NHibernate 不能告诉你出了什么问题。

    很可能您在映射文件中选择了与数据库中不同的数据类型(例如,您在模型中有一个数字,而在数据库中有一个 varchar)。数据库执行隐式转换,如果失败,您会收到此错误。

    您可以通过以下方式找到它:

    • 查看调试器中的值并尝试找到比平常更大的值
    • 读取您的映射文件和类声明并将其与您的数据库模型进行比较
    • 使用 SchemaExport 导出模型并将导出的模型与您的模型进行比较。

    【讨论】:

    • 好的,我没有很好地解释我的问题。我可以轻松地在我的本地开发盒上准确追踪数据库错误发生的位置(例如,打开 NHibernate 日志记录)。当有客户端使用该应用程序时会出现此问题,并且他们会收到随机保存错误。我不知道(来自异常)它来自 100 多个表中的哪一个。当错误发生时,我会 NHibernate 告诉我它正在刷新的确切实体。
    • 你在堆栈跟踪中看不到这个,当错误发生时你的应用程序正在做什么?
    • 我遇到过这个问题,虽然我认为这更多的是关于 SqlCe 而不是 NH。我需要知道哪个字段太长才能向用户显示适当的错误消息。 SqlCe 引发的异常几乎没有说明什么。
    猜你喜欢
    • 1970-01-01
    • 2022-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多