[英]“Invalid Object Name” error during db.SaveChanges() (Entity Framework/MVC)
(解决了)
尝试从我们正在构建的应用程序中保存对实体的更改时,我收到一个非常奇怪的错误。
[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表。 删除它,不再有任何问题。
毕竟我的应用程序代码没有问题。
您是否尝试过模型,然后按Ctrl + A选择所有表/视图/等,然后按删除。
然后再次从数据库更新。
我在EF中出现了几个随机错误,因为“从数据库更新”不会删除很久以来被删除的旧对象!
显然可能值得先备份,虽然我从未遇到过使用这种技术的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.