Если вы спросите меня, я бы добавил библиотеку классов c # в ваш проект и использовал бы ее для вашего DAL, поскольку c # имеет более широкую пользовательскую базу и, следовательно, более протестирован. VB и C # отлично работают вместе в решении
При этом последние шаблоны c # уже создают отдельные файлы: https://github.com/subsonic/SubSonic-3.0-Templates/tree/master/ActiveRecord
Полагаю, никто не перенес код на атм vb.net.
Что касается вашего второго вопроса (как загрузить объект по имени столбца), subsonic 3 интенсивно использует лямбда-выражения, поэтому вам нужно использовать только перегрузку, которая принимает выражение (Func (из User, Boolean))
Другими словами:
dim user1 as new User(Function(x) x.UserName = "Test")
или
dim user2 as User = User.SingleOrDefault(Function(x) x.UserName = "Test")
или даже
dim user3 as User = (From u in User.All()
Where u.UserName = "Test"
Select u).SingleOrDefault()
последние два возвращают объект User или Nothing.
Первый всегда возвращает объект, даже если пользователь не существует, поэтому вы должны проверить
user1.IsNew () при необходимости.