可以在网上使用这样的东西: (我的申请是在asp.net mvc上)
public static class DbUtil
{
public static int Insert(object o, string cs)
{
using (var conn = new SqlConnection(cs))
using (var cmd = conn.CreateCommand())
{
...
conn.Open();
return Convert.ToInt32(cmd.ExecuteScalar());
}
}
}
用法:
public class Repository<T> : IRepository<T>
{
public virtual int Insert(T o)
{
return DbUtil.Insert(o, Cs);
}
}
在服务或控制器中构造函数注入之后
public MyController(
IRepository<Organization> organizationRepository)
{
this.organizationRepository = organizationRepository;
}
答案 0 :(得分:2)
使用这个静态类是绝对可以的,只要它隐藏在存储库后面,就像你的情况一样。这允许使用存储库的控制器逻辑与数据访问之间的耦合较弱。你所展示的静态方法看起来很完美reentrant,这使得线程安全。
答案 1 :(得分:1)
如上所述,您的静态方法没有并发问题,因为它不对任何共享数据进行操作,并且每次调用都会实例化其自己的本地连接和命令对象。
然而,从使该方法保持静态,你似乎并没有获得太多。通常,您应该优先使用静态方法的实例方法,因为在测试期间无法模拟静态方法调用。