Хотя это действительно междисциплинарная проблема, я лично предпочитаю такой код:
MembershipUser user = Membership.GetUser();
Guid userID = (Guid)user.ProviderUserKey;
НЕ должно быть на уровне данных.
Мне нравится видеть этот вид кода на уровне выше уровня данных, обычно на бизнес-уровне, просто потому, что я хочу, чтобы мой уровень данных был полностью независимым от того, откуда берутся данные, которые он будет читать / записывать / обрабатывать , Я хочу, чтобы сбор данных проводился в основном на уровне пользовательского интерфейса (в случае пользовательских данных / ввода) и, возможно, немного больше сбора данных на бизнес-уровне (например, сбор идентификатора пользователя или получение ролей / авторизации пользователя).
Размещение такого кода на бизнес-уровне потенциально может привести к дублированию этого кода во многих различных объектах домена, однако это можно облегчить, если абстрагировать этот код в свой собственный объект и использовать композицию объектов, чтобы разрешить другой домен объекты для доступа к нему.