sql >> Database >  >> NoSQL >> MongoDB

Hoe BsonRepresentation-attribuut volgens afspraak toe te passen bij gebruik van MongoDB

Ja, dat merkte ik ook. De huidige implementatie van de StringObjectIdIdGeneratorConvention lijkt om de een of andere reden niet te werken. Hier is er een die werkt:

public class Person
{
    public string Id { get; set; }
    public string Name { get; set; }
}

public class StringObjectIdIdGeneratorConventionThatWorks : ConventionBase, IPostProcessingConvention
{
    /// <summary>
    /// Applies a post processing modification to the class map.
    /// </summary>
    /// <param name="classMap">The class map.</param>
    public void PostProcess(BsonClassMap classMap)
    {
        var idMemberMap = classMap.IdMemberMap;
        if (idMemberMap == null || idMemberMap.IdGenerator != null)
            return;
        if (idMemberMap.MemberType == typeof(string))
        {
            idMemberMap.SetIdGenerator(StringObjectIdGenerator.Instance).SetSerializer(new StringSerializer(BsonType.ObjectId));
        }
    }
}

public class Program
{
    static void Main(string[] args)
    {
        ConventionPack cp = new ConventionPack();
        cp.Add(new StringObjectIdIdGeneratorConventionThatWorks());
        ConventionRegistry.Register("TreatAllStringIdsProperly", cp, _ => true);

        var collection = new MongoClient().GetDatabase("test").GetCollection<Person>("persons");

        Person person = new Person();
        person.Name = "Name";

        collection.InsertOne(person);

        Console.ReadLine();
    }
}


  1. Verkeerde afstandsberekening met MongoDB

  2. Wat is een goede strategie om soortgelijke woorden te groeperen?

  3. Redis:mogelijk om een ​​element in een array of gesorteerde set te laten verlopen?

  4. MongoDB zoeken en verwijderen - de snelste manier