【问题标题】:InsertOnSubmit not triggering a database insert on SubmitChangesInsertOnSubmit 未在 SubmitChanges 上触发数据库插入
【发布时间】:2009-08-17 17:41:31
【问题描述】:

我遇到了一个奇怪的情况,我正在寻找找出问题所在的方法。我有一段代码可以在表中插入一行——我在其他几十个应用程序中都做过这种事情——但最终结果是数据库端什么也没有发生,也没有产生错误。如何找出问题所在?

这是我的代码:

Partial Class MyDatabaseDataContext

    Public Sub CreateEnrollee(subId, depId)

        dim newEnrollee = New enrolee With {.subId = subId, .depId = depId}

        Me.enrollees.InsertOnSubmit(newEnrollee)
        Me.SubmitChanges()

        dim test = NewEnrollee.id '<-- auto-incrementing key'

    End Sub

End Class

调用 SubmitChanges 后,不会创建新行,并且“test”为零。不会产生错误。我不知道为什么它不尝试插入行。关于如何调试的任何想法?

【问题讨论】:

  • 存储 subId 和 depId 的字段...允许空值吗?如果不是,任何值是否为 0?
  • 他们不允许空值,但我已经确认输入的值是好的。
  • 您是否运行过 SQL Profiler 以确保应用程序实际上正在与 SQL 数据库通信?如果是这样,从 Profiler 发送到服务器的 SQL 是什么?
  • 我还没有运行 SQL Profiler,但我已经让代码的其他部分与数据库通信得很好。根据 DataContext.Log,没有为插入生成语句。

标签: asp.net vb.net linq linq-to-sql insert


【解决方案1】:

您可以启用日志记录:

Me.Log = Console.Out;

您可以检查ChangeSet 的对象。

【讨论】:

  • 我做了,但它没有显示任何语句,例如数据上下文确定插入不是必要的或不可能的或其他什么。 (日志确实在我的代码前面显示了一个 SELECT 语句,所以我知道它正在工作。)
【解决方案2】:

找到了!我为其他一些问题所做的部分调试包括向一些可扩展性方法添加一些日志记录:

Partial Private Sub InsertEnrollee(instance As Enrollee)
End Sub

我认为“InsertEnrollee”存在,因此我可以在插入 Enrollee 后执行操作,所以我在这里添加了日志记录代码,这就是问题开始的时候。现在我猜这就是您将如何覆盖 Enrollee 插入并在您愿意的情况下自己进行操作。由于我本质上是用日志代码覆盖,这就是为什么没有发生任何事情(从数据库的角度来看)。

【讨论】:

  • 我刚刚遇到了这个确切的问题,我一生都无法弄清楚是什么阻止了插入!事实证明,即使您的部分方法存根中没有实现,也会发生这种行为。
猜你喜欢
  • 2013-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 2012-07-15
相关资源
最近更新 更多