重命名表的幽灵

时间:2010-11-15 18:05:26

标签: asp.net sql-server linq-to-sql table-rename

我已经在SQL Server 2008数据库中重命名了一个表,从eL_CourseStepUserNotes到StepUserNotes。我使用SSMA重命名了表格。

该表用于ASP.NET 4.0应用程序。我为所有CRUD使用LINQ to SQL。问题是以下代码:

    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 to SQL dbml文件并创建了一个新文件。我搜索了包含旧表名的字符串的所有源代码。没有。代码编译......

我还能在哪儿看?

错误从SQL Server返回,并使用该实用程序列出SO问题中显示的sql server数据库中的所有外键: sql:need to change constraint on rename table?

在FK中也没有显示旧表名的迹象。

我完全不知道在哪里看或接下来要尝试什么。有什么建议吗?

5 个答案:

答案 0 :(得分:3)

<强>答案:

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

现在一切都在恢复。

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

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

生活和学习。

答案 1 :(得分:0)

当您重新创建linq to sql文件时,您是否记得刷新服务器浏览器以首先反映表名更改?

编辑 - 我的意思是visual studio服务器浏览器。

答案 2 :(得分:0)

您需要重新绑定LINQ To SQL类,删除所有表,然后从服务器资源管理器中再次添加它们

答案 3 :(得分:0)

  1. 在visual studio中打开你的项目。
  2. 打开您的dbml文件。
  3. 找到您刚刚重命名的表格。
  4. 选择并删除它。
  5. 保存。
  6. 打开服务器资源管理器。
  7. 连接到您的数据库。
  8. 找到您已重命名的表格。
  9. 拖放dbml文件的设计器。
  10. 再次保存文件。
  11. 编译项​​目。

答案 4 :(得分:0)

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

但是,如果您从头开始重新创建,则必须在服务器资源管理器中刷新,否则它仍会从架构中提取旧名称。