C# 插入应用程序用户名
我需要存储应用程序用户名(NOT系统用户)以及我从前端应用程序(C)插入的每条记录。C# 插入应用程序用户名,c#,sql-server,C#,Sql Server,我需要存储应用程序用户名(NOT系统用户)以及我从前端应用程序(C)插入的每条记录。 有人能推荐一个不错的方法将应用程序用户名绑定为默认列值,而不是将其作为参数传递给SP吗?您可以引用一个函数,该函数在类构造函数中返回感兴趣的用户,并在执行过程的方法中调用该函数-例如: public class SomeContext { private readonly Func<string> getUserName; public SomeContext(Func<string&
有人能推荐一个不错的方法将应用程序用户名绑定为默认列值,而不是将其作为参数传递给SP吗?您可以引用一个函数,该函数在类构造函数中返回感兴趣的用户,并在执行过程的方法中调用该函数-例如:
public class SomeContext
{
private readonly Func<string> getUserName;
public SomeContext(Func<string> getUserName)
(
this.getUserName = getUserName;
)
public void SaveSomething(\* parameters here *\)
{
// build your proc based on someThing plus 'this.getUserName();'
var cmd = "Exec whatever";
ExecuteSqlCommand(cmd);
}
}
公共类上下文
{
私有只读Func getUserName;
public SomeContext(Func getUserName)
(
this.getUserName=getUserName;
)
public void SaveSomething(\*此处参数*\)
{
//基于加上“this.getUserName();”的内容构建程序
var cmd=“Exec whatever”;
ExecuteSqlCommand(cmd);
}
}
您可以使用依赖注入框架连接SomeContext
,并将getUserName
参数绑定到一个函数,该函数返回您感兴趣的用户名(()=>HttpContext.Current.user.Identity.name
,例如,在ASP.Net MVC中)
然后,在运行时,当您调用
SaveSomething
时,用户名将作为参数发送到SQL。您的应用程序可以在每次查询之前将用户名设置到上下文信息中,您可以使用一个默认表达式从中读取它。它是什么类型的应用程序,您使用的是什么数据访问层?@MartinSmith+1,nice ONE这是我们内部的C#应用程序,我正计划将用户名与连接字符串一起附加。@Appyks-如果应用程序是单用户,您可以将其与APP#name()一起发送
这将更容易,因为它不需要单独的设置上下文\u INFO
调用。如果是多用户,我认为这将对连接池产生影响。@MartinSmith-谢谢Martin,这将对我有很大帮助,如果问题太模糊,以至于“很难提出任何有意义的建议”(你的话),也许最好不要基于一个未被指明为适用的框架提出具体建议?(好吧,你的问题是关于的,所以这里有一个基于公平的答案,我使用了EF/MVC作为我的示例的一部分,但这妨碍了答案的实质-注入Func
在运行时获取用户名。相应地编辑。无法理解其中的不清楚之处!!!看看评论(建议)我和马丁史密斯先生对他给出的解决方案感到满意。。