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.