Я тоже столкнулся с этой проблемой.Если вы посмотрите на запрос, который он пытается выполнить, то увидите, что он выполняет что-то вроде этого (это не настоящий код, но вы поймете, что он имеет смысл):
exec_sql N'insert into MyTable (SomeField) Values (@ins_SomeField)',N'@0 varchar(32)','@0=SomeValue'
По какой-то причине он определяетпараметры в запросе с "@ins_"+FieldName
, но затем передает параметры как порядковые.Мне еще предстоит определить схему, почему / когда это происходит, но я потерял достаточно времени во время этого цикла разработки с SubSonic, чтобы попытаться правильно диагностировать проблему.
Обход, который я реализовал, будет включатьвы загружаете источник 3.0.0.4 из github и вносите изменения в строку 179 файла Insert.cs.
Где он читает
ParameterName = _provider.ParameterPrefix + "ins_" + columnName.ToAlphaNumericOnly(),
Меняя его на
ParameterName = _provider.ParameterPrefix + Inserts.Count.ToString(),
казалось, сделал трюк для меня.Я не даю никаких гарантий относительно этого решения для вас, явных или подразумеваемых.Это сработало для меня, но ваш пробег может отличаться.
Я должен также отметить, что существует аналогичная логика вокруг операторов "update" также в Update.cs в строках 181 и 194, но у меня их не было, и это вызывает у меня проблемы ... пока.
Честно говоря, я не думаю, что SubSonic готова к прайм-тайму, и это позор, потому что мне действительно нравится, как Роб настроил это.Тем не менее, теперь это в моем продукте, в лучшую или в худшую сторону, поэтому вы делаете лучшее с тем, что у вас есть.