Коллекция Columns состоит из имен столбцов в базе данных, а не имен свойств объекта. Это не ошибка, это важная часть функциональности, иначе SubSonic не будет знать, как запросить фактическую базу данных.
В следующей строке указывается, какое свойство использовать при заполнении значения раскрывающегося списка:
ddlUsers.DataValueField=User.Columns.UserId;
Значением User.Columns.UserId будет «User_Id», это имя столбца в таблице базы данных, а не имя свойства. Однако, когда ddlUsers привязывает данные, он не может найти свойство объекта User с именем User_Id, потому что когда SubSonic генерирует DAL, он удаляет подчеркивание из имени свойства. Лучшее исправление (как указал Раноморе):
ddlUsers.DataValueField = User.UserIdColumn.PropertyName;