SQLMetal无法从SQL Server 2005数据库创建DBML

时间:2011-02-13 18:05:11

标签: c# sql-server model-view-controller stored-procedures sqlmetal

正如标题所说,我是否尝试使用 SQLMetal 创建dbml文件。此操作的背景是创建 C#-Codefile ,其中包含所有表,函数,视图,存储过程等,以便在 MVC-Application 中使用它。 / p>

现在问题。当我从命令启动SQLMetal时需要花费时间,显示一些小错误警告和错误中断(DBML1057)。 当我读取错误消息时,SQLMetal正在尝试提取不存在的存储过程。我看了几十次这个数据库,但绝对没有找到这样的程序。也许这个程序很久以前就被召唤过了。 即,您创建名为“ GetGameDatesDesc ”的SP,稍后将其重命名为“ GetGameDates ”。我认为SQLMetal(在我的例子中)正在寻找“ GetGameDateDesc ”。但是SQLMetal在哪里提供这些信息呢?我在数据库中找不到一个字。我查看了所有的观点,功能,...机器人无济于事。此功能不再是数据库的一部分。

编辑-------------- 02/14/2011 --------------

以下是来自SQLMetal的警告:

错误DBML1042:已经使用了Type元素“ GetGameDatesDesc ”的Column元素中的成员属性“ CCode ”。 错误DBML1057:已经使用了类型“ GetGameDatesDesc ”的Column元素中的存储属性或其默认值“ _CCode ”。

2 个答案:

答案 0 :(得分:0)

看起来您的某个现有存储过程中存在一些错误。也许你删除或重命名一些存储过程,但是另一个存储过程仍然有一个被删除或重命名的调用。 尝试生成使用SQL Management Studio创建所有存储过程的SQL脚本 (右键单击数据库 - >任务 - >生成脚本)并搜索导致错误的生成脚本存储过程名称。

答案 1 :(得分:0)

这是SqlMetal的一个不幸的限制。由于SQL Server information_schema在SP代码上的限制为4000个字符,因此SqlMetal使用sys.sql_modules视图来查找SP。但是sp_rename函数没有更新该视图,因此如果重命名SP,SqlMetal将无法正常工作。 sp_rename documentation中的建议是删除并重新创建这些对象:

  

重命名存储过程,函数,   查看,或触发器不会改变   相应对象名称的名称   在的定义栏中   sys.sql_modules目录视图。   因此,我们建议使用sp_rename   不能用于重命名这些对象   类型。相反,放弃并重新创建   具有新名称的对象。

解决方案是删除该SP并重新创建它,因为SQL Server将使用object_id删除相应的sys.sql_modules行。