private static void UpdateNameByLanguage(StreetNameListItemV2 entity, List <StreetNameName> streetNameNames)
        {
            foreach (var streetNameName in streetNameNames)
            {
                switch (streetNameName.Language)
                {
                case Language.Dutch:
                    entity.NameDutch       = streetNameName.Name;
                    entity.NameDutchSearch = streetNameName.Name.RemoveDiacritics();
                    break;

                case Language.French:
                    entity.NameFrench       = streetNameName.Name;
                    entity.NameFrenchSearch = streetNameName.Name.RemoveDiacritics();
                    break;

                case Language.German:
                    entity.NameGerman       = streetNameName.Name;
                    entity.NameGermanSearch = streetNameName.Name.RemoveDiacritics();
                    break;

                case Language.English:
                    entity.NameEnglish       = streetNameName.Name;
                    entity.NameEnglishSearch = streetNameName.Name.RemoveDiacritics();
                    break;
                }
            }
        }
        public StreetNameListProjectionsV2()
        {
            When <Envelope <StreetNameWasProposedV2> >(async(context, message, ct) =>
            {
                var municipality =
                    await context.StreetNameListMunicipality.FindAsync(message.Message.MunicipalityId,
                                                                       cancellationToken: ct);

                var streetNameListItemV2 = new StreetNameListItemV2
                {
                    PersistentLocalId = message.Message.PersistentLocalId,
                    MunicipalityId    = message.Message.MunicipalityId,
                    NisCode           = message.Message.NisCode,
                    VersionTimestamp  = message.Message.Provenance.Timestamp,
                    Removed           = false,
                    PrimaryLanguage   = municipality.PrimaryLanguage,
                    Status            = StreetNameStatus.Proposed
                };

                UpdateNameByLanguage(streetNameListItemV2, message.Message.StreetNameNames);

                await context
                .StreetNameListV2
                .AddAsync(streetNameListItemV2, ct);
            });

            When <Envelope <MunicipalityWasImported> >(async(context, message, ct) =>
            {
                var streetNameListMunicipality = new StreetNameListMunicipality
                {
                    MunicipalityId = message.Message.MunicipalityId,
                    NisCode        = message.Message.NisCode
                };

                await context
                .StreetNameListMunicipality
                .AddAsync(streetNameListMunicipality, ct);
            });

            When <Envelope <MunicipalityNisCodeWasChanged> >(async(context, message, ct) =>
            {
                var municipality =
                    await context.StreetNameListMunicipality.FindAsync(message.Message.MunicipalityId,
                                                                       cancellationToken: ct);

                municipality.NisCode = message.Message.NisCode;

                var streetNames = context
                                  .StreetNameListV2
                                  .Local
                                  .Where(s => s.MunicipalityId == message.Message.MunicipalityId)
                                  .Union(context.StreetNameListV2.Where(s => s.MunicipalityId == message.Message.MunicipalityId));

                foreach (var streetName in streetNames)
                {
                    streetName.NisCode = message.Message.NisCode;
                }
            });
        }