使用NSun快速开发V1.5.5发布
1、在项目中可能出现未知的数据库字段为null,那么在1.5.4中会导致读取数据问题,解决方法是使用nullable的数据类型,那么这种情况是可预知的,如果字段中人为操作数据库或者添加修改字段的话会导致重新修改映射字段使用起来比较麻烦。所以在新版本中修改了这一弊端,可以从数据库读取null字段或者是读取元数据初始值。减少了数据库修改以及null数据库的读取问题。去掉了实体中的isDatetime选项。
2、同时,因为每个操作对象在初始化的时候都是静态初始化的,所以在多线程测试中,批处理的操作也使用了同一个操作对象进行了方法的叠加,也就是说在系统中假设操作如下:(如果这里实例化新的对象则不会出现这个问题)
DBQuery<ShippersInfo> dbsh = DBFactory.dbShippers;
using (DbTransaction tran = dbsh.GetDbTransaction())
{
try
{
dbsh.BeginBatch(list.Count + 1, tran);
foreach (var item in list)
{
dbsh.Save(item);
}
dbsh.Save(info);
dbsh.Delete(13);
dbsh.EndBatch();
tran.Commit();
}
catch (System.Exception ex)
{
tran.Rollback();
}
}
那么如果另外一个线程同时使用DBFactory.dbShippers; 这个静态操作对象,那么可能在循环保存中如果批处理条数满的话则添加内容不在进行批处理操作。如果你要是winform但线程使用的话是没有问题的
所以在这个基础上我又添加了一个新的方法,返回一个新的操作对象。
private static void BatchThreadMethod()
{
Thread td = new Thread(new ThreadStart(Test));
ShippersInfo info = new ShippersInfo() { CompanyName = "武汉", Phone = "12312" };
var cust = DBFactory.dbShippers;
cust = cust.BeginBatchThread(4);
var cust2 = DBFactory.dbShippers;
cust.Save(info);
td.Start();
Thread.Sleep(5000);
ShippersInfo info2 = new ShippersInfo() { CompanyName = "武汉21", Phone = "12312" };
cust.Save(info2);
cust.EndBatch();
}
通过方法BeginBatchThread返回一个新的批处理操作对象,所以就不在会有上述所说的问题存在了。
如果原来有用到此方法的web程序没有加事务的话则不会出现问题,如果加了事务可能另外一个线程的操作也当作本次操作的失误来进行回滚和提交了。
3、新增查询返回类型。最开始的版本为List借口类型IList<T> 自1.5.4版本后改为了List<T> 在1.5.5版本中增加了IEnumerable<T> 使查询返回延迟,更利于大数据量的返回以及查询操作。
4、多谢Larsson的提醒,在1.5.4中使用了null object设计。返回的对象都为默认值,需要使用实体的GetisExists方法来判断是否存在于数据库。这里新增了一个方法来返回Null对象,为CustomSqlToEntity,SelectToEntity方法的扩展。名称为CustomSqlToEntityOrNull以及SelectToEntityOrNull。
最新更新2011-06-10 20:10(更新下载)
其他数据库支持类库(mysql,db2,msaccess,sqlite,Postgre SQL):DbProviders (以上数据库为扩展类库中支持,核心包中包括mssql,oracle,msaccess)
如有使用疑问请加QQ:89268194