-
10-10-2019 - |
题
我已将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类,放下所有表,然后再次从服务器资源管理器添加它们
- 在Visual Studio中打开您的项目。
- 打开您的DBML文件。
- 找到您刚刚重命名的桌子。
- 选择并删除它。
- 节省。
- 打开服务器资源管理器。
- 连接到您的数据库。
- 找到您更名的桌子。
- 拖放DBML文件的设计器。
- 再次保存文件。
- 编译您的项目。
不必从DBML文件中删除表。您只需打开设计师,单击表示表的类图,然后键入表的新名称。
但是,如果您要从头开始重新创建,那么在服务器资源管理器中进行刷新很重要,否则仍将从模式中删除旧名称。