使用nettiers时间不长,记录几点注意事项:

     1,NetTiers的查询,目前只支持Find和GetPaged两上方法。其中Find不支持=之外的运算符。所以,NetTiers设计的那一套的条件构造、Order by构造只能由GetPaged享用了。Find没有办法。

     2,NetTiers的DataRepository.Provider提供四大方法:ExecuteDataSet/ExecuteNonQuery/ExecuteReader/ExecuteScalar。有了这四个,我们可以做很多事了。同时Utility类也提供上面四种方法,还提供了检查sql注入的函数。很妙的。给一个实例:

1 string sqlCommand = "GetEmployeeName";

2 // Retrieve EmployeeName ExecuteScalar returns an object, so

3 // we cast to the correct type (string).

4 string employeeName = (string)DataRepository.Provider.ExecuteScalar(CommandType.StoredProcedure, sqlCommand);

     3,用DataRepository.Provider.CreateTransaction()可以创建一个TransactionManager实例。重要的是这个实例有一个好东西:DataBase。DataBase是Enterprise Library提供的对象。它里面提供一切对数据存取、处理方法的封装。

     4,有俩个构造条件的类:SqlFilterBuilder

         ParameterizedSqlFilterBuilder

        两个都用于构造查询条件,二者使用上大同小异,后者内部实现时用的是参数式的。可避免注入。

        关于SqlFilterBuilder的使用,最经典的范例可参见:

        http://www.cnblogs.com/iCaca/archive/2007/07/10/812557.html

      5,Junction,意思是结点、连接。先声明,这个连接不一定就是and/or/not in/in。也可以是其它,为什么呢。我先说一下SqlFilterBuilder的实现原理。SqlFilterBuilder在每次Append时, 都会在前面已拼接的结果后加上Junction的值,如:前面可拼了1=1,这时AppendLike(RolesColumn.RoleNo, "Ad%"),Junction = SqlUtil.AND,那么,实际拼结的结果是:

         1=1 And  (RoleNo LIKE  "Ad%")

         所以,在BeginGroup后,才需要将Junction设为Empty。不然就( And了。ok。我觉得SqlFilterBuilder的关键在于理解Junction。