我已将SQL Server 2008数据库中的一个表重命名,从EL_COURSESTESTEPUSERNOTES到Stepusernotes。我使用SSMA重命名了表。

该表用于ASP.NET 4.0应用中。我将linq to SQL用于所有CRUD。问题是以下代码:

    dbDataContext db = new dbDataContext();
    var k = (from c in db.StepUserNotes
             where ((c.CourseStepFK == q.CourseStepFK) && (c.UserFK == q.UserFK))
             select c).FirstOrDefault();
    try
    {
        db.StepUserNotes.InsertOnSubmit(q);
        db.SubmitChanges();
    }
    catch
    {

    }

DB.Submitchanges系列失败,说:

SqlException was caught. Invalid object name 'eL_CourseStepUserNotes'.

即,桌子的旧名字回来困扰着我。

我已将旧的LINQ删除到SQL DBML文件,并创建了一个新文件。我已经搜索了所有包含旧表名称的字符串。没有什么。代码编译...

我还能看什么?

该错误是从SQL Server返回的,并使用该实用程序将所有外国密钥列出了SQL Server数据库中所示的所有外键:SQL:需要更改重命名表的约束吗?

也没有在FKS中揭示旧桌子名称的迹象。

我完全忘了看哪里或下一步尝试什么。有什么建议么?

有帮助吗?

解决方案

回答:

如Stu和Stark所述,问题是一个触发因素。 Stu给了我SQL来运行该问题。如果其他任何人都遇到此信息,请在此处记录:

Select Object_Name(ID) From SysComments 
       Where Text Like '%el_CourseStepUserNotes%'

这揭示了带有以下名称的触发器:

tr_eL_CourseStepUserNotes

扳机引用了旧名称,如下所示:

SET DateAmended = CURRENT_TIMESTAMP
     FROM eL_CourseStepUserNotes PP  
            INNER JOIN inserted i  ON PP.UserNoteId = i.UserNoteId

现在一切都在工作。

愚蠢的我,我应该意识到触发因素是问题,因为我获得的第一个错误与DateMended字段有关。

我不知道为什么在更改表名时会更新触发器。我检查了所有钥匙和关系,但忘记了这个触发因素。

活到老,学到老。

其他提示

当您将LINQ重新创建为SQL文件时,您是否记得要刷新服务器浏览器以反射表名称首先更改?

编辑 - 我的意思是Visual Studio服务器浏览器。

您需要将LINQ重新定为SQL类,放下所有表,然后再次从服务器资源管理器添加它们

  1. 在Visual Studio中打开您的项目。
  2. 打开您的DBML文件。
  3. 找到您刚刚重命名的桌子。
  4. 选择并删除它。
  5. 节省。
  6. 打开服务器资源管理器。
  7. 连接到您的数据库。
  8. 找到您更名的桌子。
  9. 拖放DBML文件的设计器。
  10. 再次保存文件。
  11. 编译您的项目。

不必从DBML文件中删除表。您只需打开设计师,单击表示表的类图,然后键入表的新名称。

但是,如果您要从头开始重新创建,那么在服务器资源管理器中进行刷新很重要,否则仍将从模式中删除旧名称。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top