Проект базы данных Visual Studio не может создать представление по синониму - PullRequest
3 голосов
/ 12 августа 2011

У меня есть ситуация, когда я работаю в новой базе данных, построенной с использованием проекта базы данных Visual Studio 2010, в котором определено число синонимов , которые указывают на наше наследство базы данных.

Наш план заключается в создании представлений об этих синонимах; таблицы, на которые ссылаются, ужасны, поэтому представления изменят данные в лучший формат; после этого мы будем использовать Entity Framework для предоставления ORM для этих представлений (идея заключается в том, что мы можем поменять представления для реальных таблиц при переносе данных).

Проблема: Я могу написать синонимы в проекте базы данных без проблем. Однако, когда я пытаюсь создать представление, которое ссылается на эти синонимы, я сталкиваюсь с ошибкой, похожей на:

Error  1  SQL03006: View: [dbo].[Person] has an unresolved reference to object [dbo].[ma_contact].

... где [dbo].[Person] - это новое представление, а [dbo].[ma_contact] - синоним устаревшей таблицы.

Обходной путь: Поместите все сценарии создания представления в Script.PostDeployment.sql, выполняя логику if-существующие-then-drop-then-create вручную.

Это далеко не идеально, хотя пока пригодно для жизни. У кого-нибудь есть идеи относительно того, как сделать эти взгляды «правильно»?

1 Ответ

1 голос
/ 01 мая 2013

Вы пытались добавить ссылку на базу данных в исходную базу данных?Вам нужно будет извлечь его формат либо в файл dacpac (для проектов SSDT SQL), либо в файл DBSchema (для проектов БД).Как только вы это сделаете, сохраните его в каком-то месте, где проект сможет его найти.Мы использовали папку «Схемы» в корне наших проектов БД, чтобы все проекты могли ссылаться на нее.В своем проекте щелкните правой кнопкой мыши папку «Ссылки» и добавьте ссылку на базу данных.Найдите файл DBSchema / Dacpac и используйте его вместе с именем базы данных.Это должно позволить вашему синониму разрешиться правильно, чтобы вы могли ссылаться на него в своих представлениях.

...