我已经在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中也没有显示旧表名的迹象。
我完全不知道在哪里看或接下来要尝试什么。有什么建议吗?
答案 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)
答案 4 :(得分:0)
没有必要从DBML文件中删除表。您只需打开设计器,单击表示表的类图,然后键入表的新名称。
但是,如果您从头开始重新创建,则必须在服务器资源管理器中刷新,否则它仍会从架构中提取旧名称。