Asp.net 重命名表的幽灵
我已经重命名了SQLServer2008数据库中的一个表,从eL_CourseStepUserNotes到StepUserNotes。我使用SSMA重命名了表 该表用于ASP.NET 4.0应用程序。我对所有CRUD使用LINQ到SQL。问题在于以下代码: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 =
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类,删除所有表,然后从服务器资源管理器中再次添加它们
不必从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:谢谢,这是一个很好的教训。正如问题中所暗示的那样,你也这么做了。搜索完字符串后,会出现旧名称。