Драйвер MongoDB не вставляет свойство List <string>модели C # в виде массива - PullRequest
1 голос
/ 15 мая 2019

У меня есть модель, которая имеет свойство List<string>:

public class SignalDoc_Header_NamedMeasures
{
    public ObjectId Id { get; set; }
    public string Type { get; set; }
    public string SignalName { get; set; }
    public string Filename { get; set; }
    public DateTime DateStart { get; set; }
    public DateTime DateEnd { get; set; }
    public List<string> HeaderLines{ get; }

    public SignalDoc_Header_NamedMeasures()
    {
        HeaderLines = new List<string>();
    }
}

Анализатор файлов данных заполнит модель и сохранит ее в коллекции

var dataHeader = new SignalDoc_Header_NamedMeasures
{
    Type = "Foo",
    SignalName = "xyzzy",
    Filename = fi.FullName,
};
…
// read through top part of a tricky text file to header line section
dataHeader.HeaderLines.Add(line);  // save the header line, other files might have multiple header lines.
… 
// parse file, tracking first and last timestamp of detail records
… 
dataHeader.DateStart = dateStart;
dataHeader.DateEnd = dateEnd;
… 

string collectionName = … some function of filename … ;
DropCollection(collectionName); // helper method

var h = AppDb.GetCollection<SignalDoc_Header_NamedMeasures>(collectionName);
await h.InsertOneAsync(dataHeader);

The InsertOneAsync работает, но вставленный документ не содержит массив для HeaderLines.Я использую Compass Community, чтобы посмотреть на базу данных.

Q: Что отсутствует или препятствует сохранению List<string> в виде массива?

В других местах AppDb устанавливается как

    static MongoClient Client { get; set; }
    static IMongoDatabase AppDb { get; set; }

    static async Task<int> Main(string[] args)
    {
        try {
            Client = new MongoClient($"mongodb://{ConnectionParameters}");
        } catch (Exception e)
        {
            Console.WriteLine(e.Message);
            Environment.Exit(-1);
        }

        AppDb = Client.GetDatabase(DatabaseName);

1 Ответ

0 голосов
/ 15 мая 2019

Оказывается, что для этого свойства по умолчанию требуется set, а драйвер MongoDB должен «соблюдать» его.

public List<string> HeaderLines { get; }        // driver does not store
public List<string> HeaderLines { get; set; }   // driver stores as Array
...