SQLMetal не может создать DBML из базы данных SQL Server 2005 - PullRequest
2 голосов
/ 13 февраля 2011

Как уже сказано в заголовке, я пытаюсь создать dbml-файл, используя SQLMetal .Фоном для этого действия является создание C # -Codefile , который содержит все таблицы, функции, представления, хранимые процедуры и т. Д. Для использования в MVC-приложении .

Теперь к проблеме.Когда я запускаю SQLMetal из команды, это занимает много времени, показывает некоторые незначительные предупреждения и обрывы в ошибке (DBML1057).Когда я прочитал сообщение об ошибке, SQLMetal пытается извлечь хранимую процедуру, которая не существует.Я смотрел базу данных десятки раз, но точно не мог найти такую ​​процедуру.Может быть, эта процедура была вызвана так давно.то есть вы создаете SP с именем " GetGameDatesDesc ", а затем вы переименовываете его в " GetGameDates ".SQLMetal (в моем случае) ищет " GetGameDateDesc ", я думаю.Но откуда у SQLMetal эта информация?Я не могу найти слово в базе данных.Я просмотрел все виды, функции, ... бот безрезультатно.Эта функция больше не является частью базы данных.

Редактировать -------------- 14/14/2011 --------------

Вот предупреждения из SQLMetal:

Ошибка DBML1042: атрибут элемента ' CCode ' в элементе Column элемента Type ' GetGameDatesDesc 'уже был использован.Ошибка DBML1057: атрибут хранилища или его значение по умолчанию ' _CCode ' в элементе Column типа ' GetGameDatesDesc ' уже используется.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2011

Это досадное ограничение SqlMetal.Поскольку в SQL-файле information_schema установлено ограничение в 4000 символов для кода SP, SqlMetal использует представление sys.sql_modules для поиска SP.Но это представление не обновляется функцией sp_rename, поэтому, если вы переименуете SP, SqlMetal не будет работать правильно.Рекомендация, найденная в документации sp_rename , заключается в удалении и воссоздании объектов такого типа:

Переименование хранимой процедуры, функции, представления или триггера не изменит имя соответствующегоимя объекта в столбце определения представления каталога sys.sql_modules.Поэтому мы рекомендуем не использовать sp_rename для переименования этих типов объектов.Вместо этого удалите и заново создайте объект с его новым именем.

Решение состоит в том, чтобы удалить этот SP и воссоздать его, поскольку SQL Server будет использовать object_id для удаления соответствующей строки sys.sql_modules.

0 голосов
/ 13 февраля 2011

Похоже, что есть какая-то ошибка в одной из ваших существующих хранимых процедур. Возможно, вы удалили или переименовали какую-то хранимую процедуру, но у какой-то другой хранимой процедуры все еще есть вызов, который удален или переименован. Попробуйте создать сценарий SQL, который создает все хранимые процедуры с помощью SQL Management Studio. (Щелкните правой кнопкой мыши базу данных -> Задачи -> Создать сценарии) и найдите в сгенерированном сценарии имя хранимой процедуры, вызывающее ошибку.

...