public async Task AddRecordsAsync(IEnumerable <Record> records) { var records_list = new List <RecordModel>(); foreach (var record in records) { records_list.Add(Serializer.SerializeRecord(record)); } db.Records.AddRange(records_list); await db.SaveChangesAsync(); }
public async Task <byte[]> AddTransactionAsync(IEnumerable <Transaction> transactions) { IList <TransactionModel> tx_list = new List <TransactionModel>(); string result = null; foreach (var tx in transactions) { if (tx.Data.Select(s => s.Value).First() == null) { continue; } var list = tx.Data.Select(s => s.Value.ToString()).ToList(); result = Serializer.ConcatenateData(list); var model = new TransactionModel() { TransactionHash = tx.Hash.ToByteArray(), RawData = Serializer.ToBinaryArray(result), Timestamp = tx.TimeStamp, Signature = tx.Sign.ToByteArray(), PubKey = tx.PubKey.ToByteArray(), }; var txs = database.Transactions.ToList(); foreach (var raw_tx in txs) { if (raw_tx.TransactionHash.SequenceEqual(model.TransactionHash)) { throw new InvalidTransactionException("Optimistic concurrency"); } } tx_list.Add(model); } try { database.Transactions.AddRange(tx_list); await database.SaveChangesAsync(); } catch (DbEntityValidationException ex) { throw new InvalidOperationException(ex.EntityValidationErrors.First() .ValidationErrors .FirstOrDefault() .ErrorMessage); } return(Serializer.ComputeHash(Serializer.ToBinaryArray(result))); }