首页 新闻 会员 周边

对Enterprise Library进行封装,使用静态的DataBase实例变量可以吗

0
悬赏园豆:50 [已解决问题] 解决于 2009-05-08 22:42

对Enterprise Library进行封装,使用静态的DataBase实例变量可以吗。例如编写下面的一个静态类。

public static class DBHelper 
{

  private static Database db = DatabaseFactory.CreateDatabase();

}

在DBHelper的中的查询更新方法都使用db实例变量进行调用可以吗,会不会有并发问题,看到很多文章和实例都是new一个对象再进行调用的。

每天看看的主页 每天看看 | 初学一级 | 园豆:60
提问于:2009-04-30 15:16
< >
分享
最佳答案
0

我觉得是可以的,因为DataBase这个类是抽象类,里面包含了所有数据库的公共特性,我们可以采用多继承实现多数据库支持的,比如要支持sqlserver数据库必须写一个类继承自Database(注意:企业库已经帮你实现了好几个这样的继承类,所以使用者就不用再写了).

那么Database db = DatabaseFactory.CreateDatabase(); 这句话其实是是实例化一个我们上面说的某一个继承类哦(主要看你连接字符串的提供者属性是设置成什么数据库,它就实例化什么继承类),

DataBase这个抽象类本身设计也没有把连接对象设计成属性,而是执行里面一个数据访问方法就在方法内部创建一个连接对象,或者外部创建一个连接对象传递给该类的数据访问方法,所以该类的实例完全可以设置成静态的,可以支持多线程,而不会造成连接对象被多线程共用的现象,放心吧,用吧

再进一步说DatabaseFactory.CreateDatabase();这个方法内部肯定也有对创建的实例进行缓存.

给我分吧,说了这么多了,哈哈

玛瑙王国--这里的玛瑙会说话 | 菜鸟二级 |园豆:258 | 2009-05-02 08:53
其他回答(1)
0

并不建议使用静态的,不仅仅是并发上的问题,很有可能一次异常之后,这个Database将始终处在不可用状态

Gray Zhang | 园豆:17610 (专家六级) | 2009-05-01 12:12
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册