我可以使用SYSTEM_USER
值获取当前登录的SQL Server用户的身份,但有没有办法通过linq以某种方式执行此操作?我正在寻找类似下面的内容:
var query = from u in dataContext.Users
where u.domainname == dataContext.system_user
select u.fullname;
使用Environment.UserName
之类的东西在非域用户通过VPN进行身份验证的情况下不起作用,并且通过单独的语句进行查询是不可取的,因为我只想使用一个语句来获取数据。
答案 0 :(得分:4)
调用系统函数可以通过在数据库中创建可以在ORM中进一步映射的新函数来完成。这取决于有关映射用户数据库功能的ORM功能。
CREATE FUNCTION dbo.fnSystemUser () returns varchar(120)
AS
BEGIN
return (select SYSTEM_USER)
END
LINQ2SQL和EF将为以下LINQ查询创建单个SQL语句。
var query = from u in dataContext.Users
where u.domainname == dataContext.fnSystemUser()
select u.fullname;
答案 1 :(得分:0)
LINQ本身对您的数据库一无所知,所以没有。如果您正在讨论LINQ 2实体(正如代码示例中的某些关键字所暗示的那样),您可以使用显式SQL语句中的ExecuteQuery
重载之一(或其中一个亲属)。
作为替代方案,您可以解析连接字符串以获取用户登录详细信息。我相信如果您不使用Windows身份验证,SqlConnectionStringBuilder
类应该能够告诉您用于连接数据库的用户的用户名和密码。
答案 2 :(得分:0)
试试这个:
class System
{
public string SystemUser { get; set; }
}
var query = dataContext.ExecuteQuery<System>("select SYSTEM_USER AS 'SystemUser'");