Codesmith - Предмет не может быть найден в коллекции, соответствующей запрошенному имени или порядковому номеру

Попытка сгенерировать выходной файл в Codesmith Generator (csg).

Я использую ADOXSchemaProvider для доступа к базе данных SQL. Получаю эту ошибку на тривиальной таблице (1 поле varchar(50))

Синтаксис сообщения, кажется, указывает на то, что проблема связана с CSG, пытающейся получить доступ к свойствам в списке / коллекции. Некоторые другие вопросы SO (нереализованные для CSG) предположили, что использование зарезервированных слов может быть проблемой, поэтому я использую кучу букв. Не проблема.

Я удалил / переустановил.

Сценарий целевой таблицы это

CREATE TABLE [dbo].[tblWitsEnd](
    --[Id] [int] IDENTITY(1,1) NOT NULL,
    asdf  varchar(255) null

) ON [PRIMARY]

GO

Ошибка вызова стека это

Error: Item cannot be found in the collection corresponding to the requested name or ordinal.
Stack Trace:
   at ADOX.Properties.get_Item(Object Item)
   at SchemaExplorer.ADOXSchemaProvider.GetTableColumns(String connectionString, TableSchema table)
   at SchemaExplorer.TableSchema.#o4c()
   at SchemaExplorer.TableSchema.get_Columns()
   at _CodeSmith.StartingBlocks30_cst.__RenderMethod1(TextWriter writer, Control control) in G:\csgtemplate.cst:line 113
   at CodeSmith.Engine.DelegateControl.Render(TextWriter writer)
   at CodeSmith.Engine.Control.RenderChildren(TextWriter writer)
   at CodeSmith.Engine.CodeTemplate.Render(TextWriter writer)
   at CodeSmith.Engine.CodeTemplate.RenderToString()
   at CodeSmith.Engine.Remoting.TemplateSession.#9Hb()
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()

и строка 113 моего шаблона является первой строкой этого абзаца кода

<% for  i = 0 to  SourceTable.Columns.Count - 1  step 1 %>
     <%= GetSetFieldSnippet(SourceTable.Columns(i) ) %>
<% next %>

Кроме того, я выяснил, может ли поставщик ADOX использовать 1 в качестве основы для индекса столбцов.

Проблема не устранена, если я сделаю одно из этих.

<%=  SourceTable.Columns.Clear    %>
<%=  SourceTable.Columns.Item(0)    %>

1 ответ

В соответствии с CodeSmith, вы всегда должны получить доступ к базе данных SQL Server с SQLSchemaProvider.

Я пытался сделать это, потому что у меня периодически возникает ошибка, из-за которой источники данных SQL терпят неудачу с ошибкой деления на 0.

Добавление источника данных в Codesmith

Другие вопросы по тегам