public static DbConnection GetConnection(Database database)
        {
            Transaction transaction = Transaction.Current;

            if (transaction == null)
                return null;

            DbConnection connection = null;

            Dictionary<string, DbConnection> connectionList;
            transactionConnections.TryGetValue(transaction, out connectionList);

            if (connectionList != null)
            {
                connectionList.TryGetValue(database.ConnectionString, out connection);
                if (connection != null)
                    return connection;
            }
            else
            {
                // we need to create a connection list for this transaction
                connectionList = new Dictionary<string, DbConnection>();
                lock (transactionConnections)
                    transactionConnections.Add(transaction, connectionList);
            }

            if (!connectionList.ContainsKey(database.ConnectionString))
            {
                connection = database.GetNewOpenConnection();
                transaction.TransactionCompleted += OnTransactionCompleted;
                connectionList.Add(database.ConnectionString, connection);
            }

            return connection;
        }
示例#2
0
 public void Delete(string id)
 {
     var db = new Database(Connection);
     using (var cmd = db.GetSqlStringCommand(DELETE_SQL))
     {
         db.AddInParameter(cmd, "id", DbType.String, id);
         db.ExecuteNonQuery(cmd);
         //TODO: Remove from cache
     }
 }
 public IEnumerable<string> ListDocumentTypes(string docStore)
 {
     var types = new List<string>();
     var db = new Database(docStore);
     using(var cmd = db.GetSqlStringCommand(SELECT_DOC_TYPES))
     using(var reader = db.ExecuteReader(cmd))
     while(reader.Read())
     {
         types.Add(DBNullConvert.ToString(reader[0]));
     }
     return types;
 }
示例#4
0
 public Document Get(string id)
 {
     Document document;
     var db = new Database(Connection);
     using(var cmd = db.GetSqlStringCommand(GET_SQL))
     {
         db.AddInParameter(cmd, "id", DbType.String, id);
         using (var reader = db.ExecuteReader(cmd, true))
         {
             if (!reader.Read()) return null;
             document = HydrateDocument(reader);
             //TODO: Caching
         }
     }
     return document;
 }
 public IEnumerable<DocumentSummary> ListDocuments(string docStore, string docType)
 {
     var docs = new List<DocumentSummary>();
     var db = new Database(docStore);
     using(var cmd = db.GetSqlStringCommand(SELECT_DOCS))
     {
         db.AddInParameter(cmd, "type", DbType.String, docType);
         using(var reader = db.ExecuteReader(cmd))
         while(reader.Read())
         {
             var summary = new DocumentSummary()
                               {
                                   Id = DBNullConvert.ToString(reader[0]),
                                   CreateDate = DBNullConvert.To<DateTime>(reader[1]),
                                   ModifyDate = DBNullConvert.To<DateTime>(reader[2])
                               };
             docs.Add(summary);
         }
     }
     return docs;
 }
示例#6
0
        public IEnumerable<Document> Get(string[] ids)
        {
            //TODO: check cache, build new id array for remaining items
            var @params = ids.Select((id, index) => String.Format("@id{0}", index)).ToArray();
            var sql = String.Format(GET_MANY_SQL, String.Join(",", @params));

            IList<Document> documents = new List<Document>();
            var db = new Database(Connection);
            using(var cmd = db.GetSqlStringCommand(sql))
            {
                for (int i = 0; i < ids.Length; i++)
                    db.AddInParameter(cmd, @params[i], DbType.String, ids[i]);
                using (var reader = db.ExecuteReader(cmd, true))
                {
                    while (reader.Read())
                    {
                        Document doc = HydrateDocument(reader);
                        //TODO: Caching
                        documents.Add(doc);
                    }
                }
            }
            return documents;
        }
示例#7
0
        private void Update(Document document)
        {
            var db = new Database(Connection);
            using (var cmd = db.GetSqlStringCommand(PUT_UPDATE_SQL))
            {
                db.AddInParameter(cmd, "id", DbType.String, document.Id);
                db.AddInParameter(cmd, "doc", DbType.String, document.Content);
                db.AddInParameter(cmd, "meta", DbType.String, document.Metadata);
                db.AddInParameter(cmd, "modify", DbType.DateTime, document.ModifyDate);

                db.ExecuteNonQuery(cmd);
            }
        }
示例#8
0
        public IEnumerable<Document> GetAll(string type)
        {
            IList<Document> documents = new List<Document>();

            var db = new Database(Connection);
            using(var cmd = db.GetSqlStringCommand(GET_ALL_OF_TYPE_SQL))
            {
                db.AddInParameter(cmd, "type", DbType.String, type);
                using(var reader = db.ExecuteReader(cmd))
                {
                    while(reader.Read())
                    {
                        var doc = HydrateDocument(reader);
                        //TODO: Caching
                        documents.Add(doc);
                    }
                }
            }
            return documents;
        }