/// <summary> /// Reads the web service description documents. /// </summary> /// <param name="serviceDto">The service dto.</param> /// <param name="reader">The reader.</param> private static void ReadWebServiceDescriptionDocuments(WebServiceDescriptionDto serviceDto, IDataReader reader) { reader.NextResult(); while (reader.Read()) { var documentDto = new WebServiceDescriptionDocumentDto { Id = reader.GetInt32(0), DocumentType = (WebServiceDescriptionDocumentType) Enum.Parse( typeof(WebServiceDescriptionDocumentType), reader.GetString(1), true), Data = reader.GetString(2), Hash = reader.GetString(3) }; serviceDto.Documents.Add(documentDto); } }
/// <summary> /// Inserts the web service description. /// </summary> /// <param name="dto">The dto.</param> /// <exception cref="System.ArgumentNullException">dto</exception> /// <exception cref="System.Data.DBConcurrencyException"> /// </exception> public void InsertWebServiceDescription(WebServiceDescriptionDto dto) { const string InsertServiceCommandText = @" INSERT INTO [dbo].[WebServiceDescriptions] ( [Guid] ) VALUES ( @guid ); SET @id = SCOPE_IDENTITY();"; const string InsertDocumentCommandText = @" INSERT INTO [dbo].[WebServiceDescriptionsWebServiceDocuments] ( [ServiceId] ,[DocumentId] ) VALUES ( @serviceId ,@documentId );"; if (dto == null) throw new ArgumentNullException("dto"); using (var ctx = ConnectionManager<SqlConnection>.GetManager(Database.VeyronMeta, false)) { using (var cmd = new SqlCommand(InsertServiceCommandText, ctx.Connection)) { var idParam = cmd.Parameters.Add("@id", SqlDbType.Int); idParam.Direction = ParameterDirection.Output; cmd.Parameters.AddWithValue("@guid", dto.Guid); var rowsAffected = cmd.ExecuteNonQuery(); if (rowsAffected == 0) throw new DBConcurrencyException(ConcurencyException); dto.Id = (int)idParam.Value; } using (var cmd = new SqlCommand(InsertDocumentCommandText, ctx.Connection)) { cmd.Parameters.AddWithValue("@serviceId", dto.Id); var documentIdParam = cmd.Parameters.Add("@documentId", SqlDbType.Int); foreach (var document in dto.Documents) { documentIdParam.Value = document.Id; var rowsAffected = cmd.ExecuteNonQuery(); if (rowsAffected == 0) throw new DBConcurrencyException(ConcurencyException); } } } }
/// <summary> /// Gets the web service description. /// </summary> /// <param name="id">The identifier.</param> /// <returns>WebServiceDescriptionDto.</returns> public WebServiceDescriptionDto GetWebServiceDescription(int id) { const string CommandText = @" SELECT [Id] ,[Guid] FROM [dbo].[WebServiceDescriptions] WHERE [Id] = @id SELECT [Id] ,[DocumentType] ,[Data] ,[Hash] FROM [dbo].[WebServiceDescriptionDocuments] sdd INNER JOIN [dbo].[WebServiceDescriptionsWebServiceDocuments] j ON j.[DocumentId] = sdd.Id WHERE j.[ServiceId] = @id"; using (var ctx = ConnectionManager<SqlConnection>.GetManager(Database.VeyronMeta, false)) { using (var cmd = new SqlCommand(CommandText, ctx.Connection)) { cmd.Parameters.AddWithValue("@id", id); using (var reader = new SafeDataReader(cmd.ExecuteReader())) { if (reader.Read()) { var dto = new WebServiceDescriptionDto { Id = reader.GetInt32(0), Guid = reader.GetGuid(1) }; ReadWebServiceDescriptionDocuments(dto, reader); return dto; } } } } return null; }