[系统出现重复的业务数据--困扰已久的问题,求解救啊!!!
本帖最后由 zhlin118 于 2013-05-21 15:15:37 编辑 系统使用几年,最近偶发性的在某一两个核心方法上会出现重复的结算记录(频率从原先1年几次到最近一个月几次),始终不知道问题出在哪里,我把数据库操作类贴出来,大家帮我分析一下,看看问题出在哪里~ 同事猜测是不是因为静态方法导致线程安全引起的?
/// <summary>
/// 业务逻辑基本操作类,实现对实体‘T’的基本操作(增、删、查、改、检查)
/// </summary>
public static class DBHelper
{
/// <summary>
/// 新增(含事务)
/// </summary>
/// <typeparam name="T">Entities对象</typeparam>
/// <param name="entity">将保存的实体</param>
/// <returns>执行成功影响的行数,否则抛出异常</returns>
public static int Insert<T>(T entity, DbTransaction trans) where T : Entity, new()
{
return ORMHelper.GetGateway(trans).Save<T>(entity, trans);
}
/// <summary>
/// 根据实体修改(含事务)
/// </summary>
/// <typeparam name="T">Entities对象</typeparam>
/// <param name="entity">将修改的实体</param>
/// <returns>执行成功影响的行数,否则抛出异常</returns>
public static int Update<T>(T entity, DbTransaction trans) where T : Entity, new()
{
ReflectionBase.SetValue(entity, "SyncTime", DateTime.Now);
return ORMHelper.GetGateway(trans).Save<T>(entity, trans);
}
}
//------------------------------------
/// <summary>
/// 数据访问层代理实现类
/// </summary>
public class ORMHelper
{
//连接池的最大值和最小值(默认为1)
private const int MaxPool = 50;
public static List<Connection> ConnectionList = new List<Connection>(MaxPool);
public static Gateway GetGateway(DbTransaction trans)
{
Gateway gateway = null;
foreach (Connection conn in ConnectionList)
{
if (conn.Tran == trans)
{
gateway = conn.Conn;
conn.CallTime = DateTime.Now;
break;
}
}
if (gateway == null)
{
if (ConnectionList.Count == MaxPool) throw new Exception("数据库连接池已满,请等待...");
gateway = CreateGateway();
ConnectionList.Add(new Connection(gateway, null, ConnectionList.Count.ToString()));
}
return gateway;
}
}