private async Task UpdateChangedRelationshipsAsync(MarketEvaluationPointDataModel marketEvaluationPointDataModel) { var changedRelationships = GetChangedRelationships(marketEvaluationPointDataModel); if (changedRelationships.Count == 0) { return; } var updateStatement = $"UPDATE [dbo].[Relationships] " + "SET [EffectuationDate] = @EffectuationDate, [State] = @State " + "WHERE [Id] = @Id"; var parameters = new List <dynamic>(); marketEvaluationPointDataModel.Relationships?.ForEach(model => { parameters.Add(new { Id = model.Id, EffectuationDate = model.EffectuationDate, State = model.State, }); }); await Connection.ExecuteAsync( updateStatement, parameters) .ConfigureAwait(false); }
private async Task InsertAddedRelationshipsAsync(MarketEvaluationPointDataModel marketEvaluationPointDataModel) { var addedRelationships = GetAddedRelationships(marketEvaluationPointDataModel); if (addedRelationships.Count == 0) { return; } var insertStatement = $"DECLARE @MarketParticipantId NVARCHAR(50) " + $"SET @MarketParticipantId = (SELECT Id AS MarketParticipantId FROM [dbo].[MarketParticipants] WHERE Mrid = @Mrid)" + $"INSERT INTO [dbo].[Relationships] (MarketEvaluationPoint_Id, MarketParticipant_Id, Type, EffectuationDate, State) " + "VALUES (@MarketEvaluationPointId, @MarketParticipantId, @Type, @EffectuationDate, @State)"; var parameters = new List <dynamic>(); addedRelationships.ForEach(relationshipDataModel => { parameters.Add(new { Mrid = relationshipDataModel.Mrid, MarketEvaluationPointId = marketEvaluationPointDataModel.Id, Type = relationshipDataModel.Type, EffectuationDate = relationshipDataModel.EffectuationDate, State = relationshipDataModel.State, }); }); await Connection.ExecuteAsync( insertStatement, parameters).ConfigureAwait(false); }
private static MeteringPointSnapshot CreateMarketEvaluationPointSnapshot(MarketEvaluationPointDataModel marketEvaluationPointDataModel, List <RelationshipDataModel> relationshipDataModels) { var relationshipsSnapshot = relationshipDataModels.Select(r => new RelationshipSnapshot(r.Id, r.Mrid !, r.Type, r.EffectuationDate, r.State)) .ToList(); var meteringPointSnapshot = new MeteringPointSnapshot( marketEvaluationPointDataModel.Id, marketEvaluationPointDataModel.GsrnNumber, marketEvaluationPointDataModel.Type, relationshipsSnapshot, marketEvaluationPointDataModel.ProductionObligated, marketEvaluationPointDataModel.PhysicalState, marketEvaluationPointDataModel.RowVersion); return(meteringPointSnapshot); }
private async Task InsertAsync(MarketEvaluationPointDataModel dataModel) { var insertStatement = $"INSERT INTO [dbo].[MarketEvaluationPoints] (GsrnNumber, Type, ProductionObligated, PhysicalState, RowVersion) " + "VALUES (@GsrnNumber, @Type, @ProductionObligated, @PhysicalState, @Version);SELECT CAST(SCOPE_IDENTITY() as int)"; dataModel.Id = await Connection.ExecuteScalarAsync <int>( insertStatement, param : new { GsrnNumber = dataModel.GsrnNumber, Type = dataModel.Type, ProductionObligated = dataModel.ProductionObligated, PhysicalState = dataModel.PhysicalState, Version = 0, }).ConfigureAwait(false); await InsertAddedRelationshipsAsync(dataModel).ConfigureAwait(false); }
private async Task UpdateRowVersionOrThrowAsync(MarketEvaluationPointDataModel dataModel) { var updateStatement = "UPDATE [dbo].[MarketEvaluationPoints] " + "SET RowVersion = @Version " + "WHERE Id = @Id AND RowVersion = @PreviousVersion"; var recordsUpdated = await Connection.ExecuteAsync( updateStatement, param : new { Id = dataModel.Id, PreviousVersion = dataModel.RowVersion, Version = dataModel.RowVersion + 1, }).ConfigureAwait(false); if (recordsUpdated != 1) { throw new DBConcurrencyException(); } }
private static List <RelationshipDataModel> GetChangedRelationships(MarketEvaluationPointDataModel marketEvaluationPoint) { return(marketEvaluationPoint.Relationships .Where(r => r.Id != default(int)) .ToList()); }