namespace Data
{
/// <summary>
/// 資料庫建立工廠
/// Created By : 張占嶺
/// Created Date:2011-10-14
/// Modify By:
/// Modify Date:
/// Modify Reason:
/// </summary>
internal static class DbFactory
{
static System.Timers.Timer sysTimer = new System.Timers.Timer(10000);
volatile static Dictionary<Thread, DataContext[]> divDataContext = new Dictionary<Thread, DataContext[]>();
static DbFactory()
{
sysTimer.AutoReset = true;
sysTimer.Enabled = true;
sysTimer.Elapsed += new System.Timers.ElapsedEventHandler(sysTimer_Elapsed);
sysTimer.Start();
}
static void sysTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
List<Thread> list = new List<Thread>();
foreach (Thread item in divDataContext.Keys)
{
if (item.ThreadState == ThreadState.Stopped)
{
list.Add(item);
}
}
for (int index = 0; index < list.Count; index++)
for (int refer = 0; refer < divDataContext[list[index]].Length; refer++)
if (divDataContext[list[index]][refer] != null)
{
divDataContext[list[index]][refer].Dispose();
divDataContext[list[index]][refer] = null;
}
divDataContext.Remove(list[index]);
list[index] = null;
list = null;
/// <summary>
/// 通過工廠的制造模式擷取相應的LINQ資料庫連接配接對象
/// </summary>
/// <param name="dbName">資料庫名稱(需要與真實資料庫名稱保持一緻)</param>
/// <returns>LINQ資料庫連接配接對象</returns>
public static DataContext Intance(string dbName)
return Intance(dbName, Thread.CurrentThread);
/// <param name="thread">目前線程引用的對象</param>
public static DataContext Intance(string dbName, Thread thread)
if (!divDataContext.Keys.Contains(thread))
divDataContext.Add(thread, new DataContext[2]);
if (dbName.Equals("TEST"))
if (divDataContext[thread][0] == null)
divDataContext[thread][0] = new Entity.TEST.LinqTESTDataContext();
return divDataContext[thread][0];
if (dbName.Equals("EEE114"))
if (divDataContext[thread][1] == null)
divDataContext[thread][1] = new Entity.EEE114.LinqEEE114DataContext();
return divDataContext[thread][1];
else
return null;
}
}