Как я могу сопоставить 2 коллекции mongodb с .netC#

Место общения программистов C#
Ответить
Anonymous
 Как я могу сопоставить 2 коллекции mongodb с .net

Сообщение Anonymous »

У меня есть класс, который является частью другого класса, но этот класс содержит два списка:

Код: Выделить всё

public class ChildrenMapMetadata
{
public List Groups { get; set; }

public List Rooms { get; set; }
}
и класс mi GroupMapMetadata имеет следующее:

Код: Выделить всё

public class DbGroupMapMetadata
{
public Guid Id { get; set; }

public Guid ParentMapId { get; set; }

public string ObjectId { get; set; }

public string Name { get; set; }

public bool IsGroup { get; set; }

internal static void Build(BsonClassMap classMap)
{
classMap.AutoMap();
classMap.SetDiscriminator(nameof(DbGroupMapMetadata));
classMap.SetDiscriminatorIsRequired(true);
classMap.MapIdMember(mapMetadata => mapMetadata.Id)
.SetIdGenerator(new GuidGenerator())
.SetSerializer(new GuidSerializer(BsonType.String));
classMap.MapMember(mapMetadata => mapMetadata.ParentMapId)
.SetSerializer(new GuidSerializer(BsonType.String));
classMap.MapMember(mapMetadata => mapMetadata.ObjectId);
classMap.MapMember(mapMetadata => mapMetadata.Name);
classMap.MapMember(mapMetadata => mapMetadata.IsGroup);
}
}
Мой основной класс для получения данных из mongo выглядит следующим образом:

Код: Выделить всё

public class DbMapMetadata
{
public Guid Id { get; set; }

public string NameGLB { get; set; }

public bool IsInitialMap { get; set; }

public bool HasPortals { get; set; }

public bool HasChildren { get; set; }

public List Portals { get; set; }

public Guid? ParentMap { get; set; }

public DbChildrenMapMetadata Children { get; set; }

internal static void Build(BsonClassMap classMap)
{
classMap.AutoMap();
classMap.SetDiscriminator(nameof(DbMapMetadata));
classMap.SetDiscriminatorIsRequired(true);
classMap.MapIdMember(mapMetadata => mapMetadata.Id)
.SetIdGenerator(new GuidGenerator())
.SetSerializer(new GuidSerializer(BsonType.String));
classMap.MapMember(mapMetadata => mapMetadata.ParentMap)
.SetSerializer(new NullableSerializer(new GuidSerializer(BsonType.String)));
}
}
Для создания Mapper из mongo в C# я использую это:

Код: Выделить всё

using MongoDB.Bson.Serialization;
using Overlord.Modules.GeoMap.Infrastructure.MongoDb.Entities;
using Overlord.Shared.Infrastructure.MongoDb.Abstractions;

namespace Overlord.Modules.GeoMap.Infrastructure.MongoDb.Context;

public class MetadataDbContext(IMongoDatabase database) : DbContextBase(database)
{
public IMongoCollection MapMetadata { get; set; }

protected override void OnConfiguring()
{
BsonClassMap.RegisterClassMap(classMap => DbMapMetadata.Build(classMap));
BsonClassMap.RegisterClassMap(classMap => DbPortalMapMetadata.Build(classMap));
BsonClassMap.RegisterClassMap(classMap => DbChildrenMapMetadata.Build(classMap));
BsonClassMap.RegisterClassMap(classMap => DbGroupMapMetadata.Build(classMap));
BsonClassMap.RegisterClassMap(classMap => DbRoomMapMetadata.Build(classMap));
}
}
ошибка:

System.FormatException: 'Произошла ошибка при десериализации свойства
Children класса
Overlord.Modules.GeoMap.Infrastructure.MongoDb.Entities.DbMapMetadata:
Произошла ошибка при десериализации свойства Groups класса
Overlord.Modules.GeoMap.Infrastructure.MongoDb.Entities.DbChildrenMapMetadata:
Идентификатор элемента не соответствует ни одному полю или свойству класса
Overlord.Modules.GeoMap.Infrastructure.MongoDb.Entities.DbGroupMapMetadata.'

и мой вопрос:

Как мне правильно сопоставить это, чтобы данные были правильно связаны
и я не получаю ошибка?


Подробнее здесь: https://stackoverflow.com/questions/788 ... ngo-to-net
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»