|
Hello,
Absolutely, I have a few different places where this is happening. Here is one example:
- We have a Reserved Hold Class. It keeps an array of SectionAssignments.
- The ReservedHold class acts as an Aggregate and will allow saving of Section Assignments into it.
// code placeholder
|
// THIS IS HOW A CLASS LOOKS LIKE - The important one to look at is the
|
public class ReservedHold
|
{
|
[BsonConstructor]
|
public ReservedHold(string id, string tenantId, string eventId, string title,
|
string description, HtmlColor color, ReservedHoldCriteria holdCriteria)
|
{
|
Id = id;
|
TenantId = tenantId;
|
EventId = eventId;
|
Title = title;
|
Description = description;
|
HoldCriteria = holdCriteria;
|
_Sections = new List<SectionAssignment>();
|
DateCreatedUtc = DateTime.UtcNow;
|
DateModifiedUtc = DateTime.UtcNow;
|
Archivable = new Archivable();
|
Color = color;
|
}
|
|
|
public string Description { get; protected set; }
|
|
|
[BsonRequired] public HtmlColor Color {get; protected set;}
|
|
public DateTime DateCreatedUtc { get; protected set; }
|
|
|
public DateTime DateModifiedUtc { get; protected set; }
|
|
|
public ReservedHoldCriteria HoldCriteria { get; protected set; }
|
|
|
[BsonId]
|
[BsonRepresentation(BsonType.ObjectId)]
|
public string Id { get; protected set; }
|
|
|
[BsonRequired] public string TenantId { get; protected set; }
|
|
|
[BsonRequired] public string EventId { get; protected set; }
|
|
|
[BsonIgnore] public IReadOnlyList<SectionAssignment> Sections => _Sections;
|
|
|
[BsonRequired] public string Title { get; protected set; }
|
|
|
public Archivable Archivable { get; protected set; }
|
|
|
[BsonElement("Sections")] private List<SectionAssignment> _Sections { get; set; }
|
}
|
When this is first saved in MongoDB, it is saved like so:
// code placeholder
|
{
|
"_id" : ObjectId("5e72db38effda01f643d41d1"),
|
"Description" : "",
|
"Color" : {
|
"Value" : "#CDD973"
|
},
|
"DateCreatedUtc" : ISODate("2020-03-19T02:38:48.922+0000"),
|
"DateModifiedUtc" : ISODate("2020-03-19T02:38:48.922+0000"),
|
"HoldCriteria" : {
|
"UnlockCode" : "U2ITIS",
|
"DateValidUntilUtc" : ISODate("2020-07-31T20:30:42.315+0000")
|
},
|
"TenantId" : "5db7583c34183c0c384f35ed",
|
"EventId" : "5e72daabeffda01f643d41c9",
|
"Title" : "VIP PIT",
|
"Archivable" : {
|
"IsArchived" : false,
|
"DateArchivedUtc" : null
|
},
|
"Sections" : [ ]
|
}
|
|
Notice that Sections is an empty array. This is how the Section Assignment class looks like:
// Section Assignment class
|
public class SectionAssignment
|
{
|
[BsonRequired] public string Key { get; protected set; }
|
|
|
[BsonElement("Rows")] private List<RowAssignment> RowsPrivate { get; set; }
|
|
|
[BsonIgnore] public IReadOnlyList<RowAssignment> Rows => RowsPrivate;
|
|
|
public SectionAssignment()
|
{
|
|
|
}
|
|
|
[BsonConstructor]
|
public SectionAssignment(string key, List<RowAssignment> rows)
|
{
|
RowsPrivate = rows;
|
Key = key;
|
}
|
|
|
}
|
Initially, I didn't have the empty constructor, but added it to see if that made a difference. Now when I try to add the SectionAssignment and call the Replace Document method, I get the following error:
// ERROR LOG
|
MongoDB.Bson.BsonSerializationException: Creator map for class HtComm.Events.Domain.SeatedEvents.SectionAssignment has 2 arguments, but none are configured.\r\n at MongoDB.Bson.Serialization.BsonCreatorMap.Freeze()\r\n at MongoDB.Bson.Serialization.BsonClassMap.Freeze()\r\n at MongoDB.Bson.Serialization.BsonClassMap.LookupClassMap(Type classType)\r\n at MongoDB.Bson.Serialization.BsonClassMapSerializationProvider.GetSerializer(Type type, IBsonSerializerRegistry serializerRegistry)\r\n at MongoDB.Bson.Serialization.BsonSerializerRegistry.CreateSerializer(Type type)\r\n at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory)\r\n at MongoDB.Bson.Serialization.BsonSerializerRegistry.GetSerializer[T]()\r\n at MongoDB.Bson.Serialization.Serializers.EnumerableSerializerBase`2.<>c__DisplayClass4_0.<.ctor>b__0()\r\n at System.Lazy`1.ViaFactory(LazyThreadSafetyMode mode)\r\n at System.Lazy`1.ExecutionAndPublication(LazyHelper executionAndPublication, Boolean useDefaultConstructor)\r\n at System.Lazy`1.CreateValue()\r\n at MongoDB.Bson.Serialization.Serializers.EnumerableSerializerBase`2.Serialize(BsonSerializationContext context, BsonSerializationArgs args, TValue value)\r\n at MongoDB.Bson.Serialization.Serializers.SerializerBase`1.MongoDB.Bson.Serialization.IBsonSerializer.Serialize(BsonSerializationContext context, BsonSerializationArgs args, Object value)\r\n at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Serialize(IBsonSerializer serializer, BsonSerializationContext context, Object value)\r\n at MongoDB.Bson.Serialization.BsonClassMapSerializer`1.SerializeNormalMember(BsonSerializationContext context, Object obj, BsonMemberMap memberMap)\r\n at MongoDB.Bson.Serialization.BsonClassMapSerializer`1.SerializeClass(BsonSerializationContext context, BsonSerializationArgs args, TClass document)\r\n at MongoDB.Bson.Serialization.BsonClassMapSerializer`1.Serialize(BsonSerializationContext context, BsonSerializationArgs args, TClass value)\r\n at MongoDB.Bson.Serialization.Serializers.SerializerBase`1.MongoDB.Bson.Serialization.IBsonSerializer.Serialize(BsonSerializationContext context, BsonSerializationArgs args, Object value)\r\n at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Serialize(IBsonSerializer serializer, BsonSerializationContext context, Object value)\r\n at MongoDB.Bson.Serialization.Serializers.BsonDocumentWrapperSerializer.SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, BsonDocumentWrapper value)\r\n at MongoDB.Bson.Serialization.Serializers.BsonValueSerializerBase`1.Serialize(BsonSerializationContext context, BsonSerializationArgs args, TBsonValue value)\r\n at MongoDB.Bson.Serialization.Serializers.SerializerBase`1.MongoDB.Bson.Serialization.IBsonSerializer.Serialize(BsonSerializationContext context, BsonSerializationArgs args, Object value)\r\n at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Serialize(IBsonSerializer serializer, BsonSerializationContext context, Object value)\r\n at MongoDB.Bson.Serialization.Serializers.BsonValueSerializerBase`1.Serialize(BsonSerializationContext context, BsonSerializationArgs args, TBsonValue value)\r\n at MongoDB.Bson.Serialization.IBsonSerializerExtensions.Serialize[TValue](IBsonSerializer`1 serializer, BsonSerializationContext context, TValue value)\r\n at MongoDB.Driver.Core.Operations.RetryableUpdateCommandOperation.UpdateRequestSerializer.SerializeUpdate(BsonSerializationContext context, BsonSerializationArgs args, UpdateRequest request)\r\n at MongoDB.Driver.Core.Operations.RetryableUpdateCommandOperation.UpdateRequestSerializer.SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, UpdateRequest value)\r\n at MongoDB.Bson.Serialization.Serializers.SealedClassSerializerBase`1.Serialize(BsonSerializationContext context, BsonSerializationArgs args, TValue value)\r\n at MongoDB.Bson.Serialization.Serializers.SerializerBase`1.MongoDB.Bson.Serialization.IBsonSerializer.Serialize(BsonSerializationContext context, BsonSerializationArgs args, Object value)\r\n at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.CommandMessageBinaryEncoder.WriteType1Section(BsonBinaryWriter writer, Type1CommandMessageSection section, Int64 messageStartPosition)\r\n at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.CommandMessageBinaryEncoder.WriteSections(BsonBinaryWriter writer, IEnumerable`1 sections, Int64 messageStartPosition)\r\n at MongoDB.Driver.Core.WireProtocol.Messages.Encoders.BinaryEncoders.CommandMessageBinaryEncoder.WriteMessage(CommandMessage message)\r\n at MongoDB.Driver.Core.Connections.BinaryConnection.SendMessagesHelper.EncodeMessages(CancellationToken cancellationToken, List`1& sentMessages)\r\n at MongoDB.Driver.Core.Connections.BinaryConnection.SendMessagesAsync(IEnumerable`1 messages, MessageEncoderSettings messageEncoderSettings, CancellationToken cancellationToken)\r\n at MongoDB.Driver.Core.WireProtocol.CommandUsingCommandMessageWireProtocol`1.ExecuteAsync(IConnection connection, CancellationToken cancellationToken)\r\n at MongoDB.Driver.Core.Servers.Server.ServerChannel.ExecuteProtocolAsync[TResult](IWireProtocol`1 protocol, ICoreSession session, CancellationToken cancellationToken)\r\n at MongoDB.Driver.Core.Operations.RetryableWriteOperationExecutor.ExecuteAsync[TResult](IRetryableWriteOperation`1 operation, RetryableWriteContext context, CancellationToken cancellationToken)\r\n at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase`1.ExecuteBatchAsync(RetryableWriteContext context, Batch batch, CancellationToken cancellationToken)\r\n at MongoDB.Driver.Core.Operations.BulkUnmixedWriteOperationBase`1.ExecuteBatchesAsync(RetryableWriteContext context, CancellationToken cancellationToken)\r\n at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.ExecuteBatchAsync(RetryableWriteContext context, Batch batch, CancellationToken cancellationToken)\r\n at MongoDB.Driver.Core.Operations.BulkMixedWriteOperation.ExecuteAsync(IWriteBinding binding, CancellationToken cancellationToken)\r\n at MongoDB.Driver.OperationExecutor.ExecuteWriteOperationAsync[TResult](IWriteBinding binding, IWriteOperation`1 operation, CancellationToken cancellationToken)\r\n at MongoDB.Driver.MongoCollectionImpl`1.ExecuteWriteOperationAsync[TResult](IClientSessionHandle session, IWriteOperation`1 operation, CancellationToken cancellationToken)\r\n at MongoDB.Driver.MongoCollectionImpl`1.BulkWriteAsync(IClientSessionHandle session, IEnumerable`1 requests, BulkWriteOptions options, CancellationToken cancellationToken)\r\n at MongoDB.Driver.MongoCollectionImpl`1.UsingImplicitSessionAsync[TResult](Func`2 funcAsync, CancellationToken cancellationToken)\r\n at MongoDB.Driver.MongoCollectionBase`1.ReplaceOneAsync(FilterDefinition`1 filter, TDocument replacement, ReplaceOptions options, Func`3 bulkWriteAsync)\r\n at HtComm.Events.Services.SeatedEvents.ReservedHolds.ReservedHoldRepository.ReplaceHold(ReservedHold reservedHold, CancellationToken cancellationToken) in C:\\HyperTrends\\Source\\eventsbackend\\EventsEngine\\HtComm.Events.Service\\SeatedEvents\\ReservedHolds\\ReservedHoldRepository.cs:line 37\r\n at HtComm.Events.Services.SeatedEvents.AddReservedHoldSectionRequestHandler.Handle(AddReservedHoldSectionRequest request, CancellationToken cancellationToken) in C:\\HyperTrends\\Source\\eventsbackend\\EventsEngine\\HtComm.Events.Service\\SeatedEvents\\AddReservedHoldSectionUseCase.cs:line 108\r\n",
|
This is happening pretty much all over the application now. None of these items were issues before.
The line 108, where the error is has the following code:
// SNIPPET CODE
|
if (reservedHold.AddSectionAssignment(sectionAssignment))
|
{
|
//LINE 108 -->
|
var outcome = await _reservedHoldRepository.ReplaceHold(reservedHold, cancellationToken);
|
if (outcome)
|
The Repository's ReplaceHold method looks like so:
// Repository
|
public async Task<bool> ReplaceHold(ReservedHold reservedHold,
|
CancellationToken cancellationToken = default(CancellationToken))
|
{
|
//Line 37
|
var outcome = await _context.ReservedHolds.WithWriteConcern(WriteConcern.Acknowledged)
|
.ReplaceOneAsync(x => x.Id == reservedHold.Id, reservedHold, new ReplaceOptions(), cancellationToken);
|
return outcome.IsAcknowledged && outcome.ModifiedCount > 0;
|
}
|
Hopefully this helps. Our code is pretty standard. I am unable to figure out why it won't let me do this operation for this scenario when I use the same approach in many other places and it works. The code has not changed in over 6 months (just an FYI).
Thank you and looking forward to collaborating with you to get this to the finish line.
Anup Marwadi
|