private void InitTable(string tableName) { TableName = tableName; string CacheKey = MyConnectionString + ":TBL:" + TableName; if (!DatabaseCache.Instance.ContainsKey(CacheKey + ":Insert")) { lock (DatabaseCache.Instance) { if (!DatabaseCache.Instance.ContainsKey(CacheKey + ":Insert")) { using (IDbConnection conn = CreateConnection()) { using (IDbCommand command = CreateCommand(conn, MyTransaction)) { IDbDataAdapter adapter = MyDatabase.CreateAdapter(command); try { DatabaseCache insertCache, updateCache, deleteCache, isExistCache; DataTable TableSchema; MyDatabase.ExtractTableParameters(TableName, adapter, out insertCache, out deleteCache, out updateCache, out isExistCache, out TableSchema); DatabaseCache.Instance.Add(CacheKey + ":Insert", insertCache); DatabaseCache.Instance.Add(CacheKey + ":Update", updateCache); DatabaseCache.Instance.Add(CacheKey + ":Delete", deleteCache); DatabaseCache.Instance.Add(CacheKey + ":IsExist", isExistCache); } finally { if (adapter is IDisposable) { (adapter as IDisposable).Dispose(); } } } } } } } InsertCache = DatabaseCache.Instance[CacheKey + ":Insert"]; UpdateCache = DatabaseCache.Instance[CacheKey + ":Update"]; DeleteCache = DatabaseCache.Instance[CacheKey + ":Delete"]; IsExistCache = DatabaseCache.Instance[CacheKey + ":IsExist"]; }