Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 重命名表的幽灵_Asp.net_Sql Server_Linq To Sql_Table Rename - Fatal编程技术网

Asp.net 重命名表的幽灵

Asp.net 重命名表的幽灵,asp.net,sql-server,linq-to-sql,table-rename,Asp.net,Sql Server,Linq To Sql,Table Rename,我已经重命名了SQLServer2008数据库中的一个表,从eL_CourseStepUserNotes到StepUserNotes。我使用SSMA重命名了表 该表用于ASP.NET 4.0应用程序。我对所有CRUD使用LINQ到SQL。问题在于以下代码: dbDataContext db = new dbDataContext(); var k = (from c in db.StepUserNotes where ((c.CourseStepFK =

我已经重命名了SQLServer2008数据库中的一个表,从eL_CourseStepUserNotes到StepUserNotes。我使用SSMA重命名了表

该表用于ASP.NET 4.0应用程序。我对所有CRUD使用LINQ到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'.
Ie,这张桌子的旧名字又来了,让我心神不宁

我已经删除了旧的linqtosqldbml文件,并创建了一个新的文件。我已经在所有源代码中搜索了包含旧表名的字符串。没有什么。代码编译

我还能去哪里看

错误从SQL Server返回,并使用实用程序列出SQL Server数据库中的所有外键,如问题所示:

在FKs中也没有显示旧表名的符号


我完全不知道该去哪里看,或者下一步该做什么。有什么建议吗?

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


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

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

  • 在visual studio中打开项目
  • 打开您的dbml文件
  • 查找刚刚重命名的表
  • 选择并删除它
  • 保存
  • 打开服务器资源管理器
  • 连接到您的数据库
  • 查找已重命名的表
  • 拖放到dbml文件的设计器上
  • 再次保存文件
  • 编译你的项目

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


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

    答案:

    正如斯图和斯塔克所说,这个问题是一个导火索。斯图给了我运行解决问题的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字段有关

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


    活到老学到老。

    SQL中有没有可能有触发器或什么东西引用了旧表?为了好玩,从SysComments中运行一个Select Object_Name(ID),其中的文本为“%el_CourseStepUserNotes%”@Stu+@Sparky:谢谢!!!搞定了:问题是触发器设置了一个名为“DateAmended”的字段。为什么在名称更改失败后触发器没有更新。触发器、存储过程和函数不会自动更新。仔细想想:你将如何编写这样的功能?@Stu:谢谢,这是一个很好的教训。正如问题中所暗示的那样,你也这么做了。搜索完字符串后,会出现旧名称。