Что эквивалентно «SELECT SYSTEM_USER» в Linq - PullRequest
3 голосов
/ 04 марта 2012

Я могу получить идентификатор текущего пользователя SQL Server, вошедшего в систему, используя значение SYSTEM_USER, но есть ли способ сделать это через как-нибудь?Я ищу что-то вроде следующего:

var query = from u in dataContext.Users
            where u.domainname == dataContext.system_user
            select u.fullname;

Использование чего-то вроде Environment.UserName не будет работать в случае, если пользователь, не являющийся доменом, аутентифицируется через VPN, а запрос через отдельный оператор нежелателен, потому чтоЯ хотел бы использовать только один оператор для получения данных.

Ответы [ 3 ]

4 голосов
/ 04 марта 2012

Вызов системных функций может быть выполнен путем создания новых функций в базе данных, которые могут быть отображены в дальнейшем в ORM.Это зависит от возможностей ORM в отношении отображения функций базы данных пользователей.

CREATE FUNCTION dbo.fnSystemUser () returns varchar(120)
AS
BEGIN
    return (select SYSTEM_USER)
END

LINQ2SQL и EF создадут один оператор SQL для следующего запроса LINQ.

var query = from u in dataContext.Users
            where u.domainname == dataContext.fnSystemUser()
            select u.fullname;
0 голосов
/ 04 марта 2012

Попробуйте это:

    class System
    {
        public string SystemUser { get; set; }
    }

   var query = dataContext.ExecuteQuery<System>("select SYSTEM_USER AS 'SystemUser'");
0 голосов
/ 04 марта 2012

LINQ сама ничего не знает о вашей базе данных, поэтому нет. Если вы говорите о сущностях LINQ 2 (как подразумевают некоторые ключевые слова в вашем примере кода), вы можете использовать одну из перегрузок ExecuteQuery (или одного из ее родственников) с вашим явным оператором SQL .

В качестве альтернативы, вы можете проанализировать строку подключения, чтобы получить данные о входе пользователя в систему. Я полагаю, что класс SqlConnectionStringBuilder сможет сообщить вам имя пользователя и пароль пользователя, который использовал для подключения к базе данных, если вы не используете аутентификацию Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...