public DeployFile CreateFile(string fileName, byte[] data, FileManifest fileManifest)
        {
            if(string.IsNullOrEmpty(fileName))
            {
                throw new ArgumentNullException("fileName");
            }
            if(data == null || data.Length == 0)
            {
                throw new ArgumentNullException("data");
            }
            string fileStorageId = _fileStorage.StoreFile(data);
            var dbItem = new SqlDeployFile
            {
                Id = Guid.NewGuid().ToString(),
                FileName = fileName,
                FileStorageID = fileStorageId
            };

            dbItem.SetCreatedFields(_userIdentity.UserName);
            if(fileManifest != null)
            {
                dbItem.FileManifestJson = fileManifest.ToJson();
            }
            using(var db = _sqlConnectionInfo.GetDB())
            {
                db.Insert("DeployFile", "ID", false, dbItem);
            }
            return this.GetFile(dbItem.Id);
        }
		public DeployFile UpdateFile(string fileId, string fileName, byte[] fileData, FileManifest fileManifest)
		{
            if(string.IsNullOrEmpty(fileName))
            {
                throw new ArgumentNullException("fileName");
            }
            if(fileData == null || fileData.Length == 0)
            {
                throw new ArgumentNullException("fileData");
            }
            var file = _documentSession.LoadEnsure<DeployFile>(fileId);
			file.FileName = fileName;
			file.UpdatedDateTimeUtc = DateTime.UtcNow;
			file.UpdatedByUserName = _userIdentity.UserName;
            file.Manifest = fileManifest;
            _fileStorage.UpdateFile(file.FileStorageId, fileData);
            return this._documentSession.SaveEvict(file);
		}
		public DeployFile CreateFile(string fileName, byte[] fileData, FileManifest fileManifest)
		{
			if(string.IsNullOrEmpty(fileName))
			{
				throw new ArgumentNullException("Missing file name");
			}
			if(fileData == null || fileData.Length == 0)
			{
				throw new ArgumentNullException("Missing file data");
			}
			string fileId = _fileStorage.StoreFile(fileData);
			var file = new DeployFile
			{
				Id = Guid.NewGuid().ToString(),
				FileName = fileName,
				FileStorageId = fileId,
                Manifest = fileManifest,
				CreatedDateTimeUtc = DateTime.UtcNow,
				CreatedByUserName = _userIdentity.UserName,
				UpdatedDateTimeUtc = DateTime.UtcNow,
				UpdatedByUserName = _userIdentity.UserName
			};
            return _documentSession.StoreSaveEvict(file);
		}
 public DeployFile UpdateFile(string fileId, string fileName, byte[] fileData, FileManifest fileManifest)
 {
     if(string.IsNullOrEmpty(fileId))
     {
         throw new ArgumentNullException("fileId");
     }
     if(string.IsNullOrEmpty(fileName))
     {
         throw new ArgumentNullException("fileName");
     }
     if(fileData == null || fileData.Length == 0)
     {
         throw new ArgumentNullException("fileData");
     }
     string fileStorageId;
     using(var db = _sqlConnectionInfo.GetDB())
     {
         var dbItem = db.FirstOrDefault<SqlDeployFile>("WHERE ID=@0", fileId);
         if(dbItem == null)
         {
             throw new RecordNotFoundException(typeof(DeployFile),"Id", fileId);
         }
         dbItem.FileName = fileName;
         if(fileManifest != null)
         {
             dbItem.FileManifestJson = fileManifest.ToJson();
         }
         else 
         {
             dbItem.FileManifestJson = null;
         }
         dbItem.SetUpdatedFields(this._userIdentity.UserName);
         var sql = PetaPoco.Sql.Builder
                     .Append("UPDATE DeployFile")
                     .Append("SET FileName=@FileName, FileManifestJson=@FileManifestJson, UpdatedDateTimeUtc=@UpdatedDateTimeUtc, UpdatedByUserName=@UpdatedByUserName", dbItem)
                     .Append("WHERE ID=@Id", dbItem);
         db.Execute(sql);
         fileStorageId = dbItem.FileStorageID;
     }
     _fileStorage.UpdateFile(fileStorageId, fileData);
     return this.GetFile(fileId);
 }
 public DeployFile UpdateFile(string fileId, string fileName, byte[] fileData, FileManifest fileManifest)
 {
     throw new NotSupportedException();
 }