Если вы используете Linq to SQL, значит, у вас уже есть модель. Linq генерирует объекты и коллекции на основе вашей базы данных для вас. Сгенерированная модель является поверхностной, но довольно надежной и работоспособной. Модель Linq to SQL может быть расширена с помощью частичных классов, что позволяет расширять сущности или сам контекст для дополнительной функциональности.
Контроллер может работать напрямую с сгенерированной моделью и при необходимости передавать сущности или коллекции сущностей в представление.
Я бы предположил, что для того, что вы пытаетесь сделать, вы можете вообще не использовать встроенную систему провайдеров профилей. Поставщики профилей в asp.net работают хорошо для простых вещей персонализации, но они не работают хорошо для конкретных данных, таких как контактная информация и тому подобное. Также имейте в виду, что системы провайдеров профилей, как правило, хранят объектные данные в виде сериализованных строк в базе данных ... это очень затрудняет получение данных профиля из инструментов администратора и тому подобного. Производительность начинает становиться проблемой ОЧЕНЬ быстро в любом случае, когда вам нужна информация профиля нескольких пользователей (например, с редактором администратора).
Когда вы храните важные личные данные, такие как упомянутые вами, на самом деле вы храните «данные учетной записи», а не «профили пользователей». Вы можете расширить членство провайдера, чтобы раскрыть ваши дополнительные данные, но я, как правило, обнаружил, что гораздо проще просто свернуть мою собственную модель данных и логику доступа для обработки дополнительной информации об учетной записи.
Мое эмпирическое правило таково: если информация требуется ТОЛЬКО во время запроса, сделанного пользователем, которому принадлежат данные, то она отправляется в профилях. Если мне понадобятся данные для одного пользователя для чтения во время запроса другого пользователя или если мне понадобится «список» этих данных для разных пользователей, то они не будут включены в профили asp.net.