Как обратиться к ссылкам на проект DACPAC через API DAC?

Я пытаюсь использовать метод GetObject для получения экземпляра TSqlObject, представляющего таблицу из указанного проекта:

var id = new ObjectIdentifier(new[] {"ExternalDb"}, new[] {"Schema", "TableName"});

var table = Model.GetObject(ModelSchema.Table, id, DacQueryScopes.All);

К сожалению, похоже, это не работает.

Я прочитал в документе, что DacQueryScopes.All получит все объекты, ЗА ИСКЛЮЧЕНИЕМ тех, которые находятся в несистемной базе данных.

Итак, я думаю, именно поэтому это терпит неудачу, но тогда как я должен добраться до элементов внутри этого другого проекта?


person Crono    schedule 16.10.2015    source источник


Ответы (1)


Если вы хотите запросить объект в ссылочном проекте, откройте dacpac для этого ссылочного проекта и запросите его.

ExternalDb — это указатель, а не идентификатор нужного элемента.

person Ed Elliott    schedule 16.10.2015
comment
Таким образом, исполняемый код должен уже знать о зависимостях проекта dacpac, иметь доступ к соответствующим файлам .dacpac и загружать их с помощью метода TSqlModel.LoadFromDacpac. Правильный? - person Crono; 17.10.2015
comment
да - если вы хотите перечислить ссылки на другие dacpacs, в API ничего нет (grrrrrr), но вы можете использовать это для их чтения или записи: github.com/GoEddie/Dacpac-References - person Ed Elliott; 17.10.2015
comment
ради интереса что ты делаешь? - person Ed Elliott; 17.10.2015
comment
Я создаю уровень абстракции в виде файлов шаблонов T4, которые упростят создание некоторых объектов. Поскольку внутри TSql нет формы наследования, я закодирую некоторые из своих шаблонов в файлах T4, которые, в свою очередь, предоставят некоторые подсказки об уже скомпилированных объектах. У меня есть много избыточных шаблонов внутри этой базы данных (локализованные описания, история записей, обязательные данные и т. д.), и вместо того, чтобы дублировать логику, я сконцентрирую ее внутри шаблона, своего рода заполняя пробелы. Это будет НАМНОГО проще в разработке и обслуживании. - person Crono; 17.10.2015
comment
круто - у меня в портфеле проектов есть аналогичная вещь, но на С#, которая компилируется в t-sql. Вы поделитесь им, когда закончите? - person Ed Elliott; 17.10.2015
comment
@Ed-Elliott Будет ли ваш инструмент Dacpac-References работать для обновления путей к указанной базе данных в dacpac, чтобы я мог выполнить удаленное развертывание (например, из TeamCity)? Кто-то еще упомянул, что где-то в dacpac есть контрольная сумма, которую нужно обновить, если вы пойдете по этому пути. - person Davos; 17.11.2015
comment
Да, если вы используете изменение чего-либо в файле model.xml (включая ссылки), вы можете использовать ModelChecksumWriter.FixChecksum для записи правильной контрольной суммы (независимо от того, используете ли вы это или что-то еще для изменения файла) github.com/GoEddie/Dacpac-References/blob/master/src/ - person Ed Elliott; 17.11.2015