c# - db.SaveChanges() 期间出现 "Invalid Object Name"错误( Entity Framework /MVC)

标签 c# asp.net-mvc entity-framework sql-server-2008 ef-database-first

(已解决)

当我试图从我们正在构建的应用程序中保存对实体的更改时,我遇到了一个非常奇怪的错误。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "ReportID,RecordID,ReportName,FileName,ReportTypeID,OwningApplicationID,RecordCID,AssignedUserID")] Report report)
    {
        if (ModelState.IsValid)
        {
            db.Entry(report).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        ViewBag.OwningApplicationID = new SelectList(db.Applications, "ApplicationID", "ApplicationName", report.OwningApplicationID);
        ViewBag.ReportTypeID = new SelectList(db.ReportTypes, "ReportTypeID", "ReportTypeText", report.ReportTypeID);
        return View(report);
    }

在 db.SaveChanges() 我得到以下错误:

An exception of type 'System.Data.Entity.Infrastructure.DbUpdateException' occurred in EntityFramework.dll but was not handled in user code

如果我检查内部异常,我会发现:

"Invalid object name 'tg_DataCleaningMaintenance_PendingInsert__20150709_000000_953cccd7-0ba4-4b3e-ae5d-df6b936841f8'."

异常发生在这里:

at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update() at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.<Update>b__2(UpdateTranslator ut) at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update[T](T noChangesResult, Func'2 updateFunction) at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update() at System.Data.Entity.Core.Objects.ObjectContext.<SaveChangesToStore>b__35() at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func'1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction) at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass2a.<SaveChangesInternal>b__27()

我在网上找不到任何关于 DataCleaningMaintenance_PendingInsert 或类似内容的信息。我确实记得一个多星期前在数据库中看到一个具有相似名称的表,它已被删除。

我已经从数据库更新了我的模型,重建了项目,搜索了项目以查找对该表的任何引用,确认数据库中不存在该表。我在调试期间检查了 db 对象,但找不到对此对象的任何引用,并且我已验证连接字符串是正确的并且包含数据库名称(不仅仅是服务器名称)。我现在不知道如何解决这个问题。请帮忙!

谢谢!

编辑:确实在 SQL Server 的报告表上设置了一个触发器,这导致服务器拒绝我的更新并显示上述消息。触发器似乎来自在此表上使用 FuzzyLookup 的 SSIS 包。删除触发器应该可以解决此问题。

最佳答案

感谢用户 br4d 解决了!

SQL Server 中的 Report 表上有一个触发器,它是在该表上使用 FuzzyLookup 的 SSIS 包遗留下来的。我不确定我是怎么错过它的,因为我确实在 SSMS 中检查了触发器。我用这个查询来找到它:

SELECT * FROM (
  SELECT OBJECT_NAME(OBJECT_ID) Obj,
  SCHEMA_NAME(schema_id) [Schema],
  OBJECT_NAME(parent_object_id) Parent,
  type_desc Obj_Type
  FROM sys.objects
) Objects
WHERE Obj LIKE 'tg_%'

看到它是 Report 上的一个触发器,仔细检查了 Triggers 文件夹,你瞧,它就在那里。它在 INSERT、UPDATE 和 DELETE 查询中寻找 tg_DataCleaning_xxx 表。删除它,不再有任何问题。

毕竟我的应用程序代码没有问题。

关于c# - db.SaveChanges() 期间出现 "Invalid Object Name"错误( Entity Framework /MVC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31458841/

相关文章:

C# - 向 IP 地址和端口发送和接收 TCP/IP 消息

c# - 删除所有没有特定扩展名文件的文件夹和子目录

javascript - 使用 Javascript 不会在 View 中调用 Controller 操作

MySQL Visual Studio 2019 集成

c# - DataContractSerializer 与 BinaryFormatter 性能对比

C# 类似于 Javascript 中的事件

postgresql - PostgreSQL Entity Framework 上的 RowVersion 实现

c# - 在 EF Core 中应用所有 IEntityTypeConfiguration 派生类

c# - 是否可以在项目之间共享母版页?

mysql - 'DbContextOptionsBuilder' 不包含 'UseSqlServer' 的定义