F # LiteDB [<BsonIgnore>] игнорируется? - PullRequest
1 голос
/ 03 мая 2019

Контекст: запуск F # в контейнере

$ dotnet --version 2.2.203
$ uname -a
Linux SAFE 4.15.0-48-generic #51-Ubuntu SMP Wed Apr 3 08:28:49 UTC 2019 x86_64 GNU/Linux

на настольном компьютере с Ubuntu 18.04.

Этот простой код игнорирует атрибут [<BsonIgnore>].Значение Ignore хранится в LiteDB.Я делаю что-то неправильно?Я проверил это, посмотрев консольную команду $ dotnet LiteDB.Shell.dll micompany.db:

...
> open micompany.db
> db.computers.find
[1]: {"_id":11,"Ignore":"ignore","Manufacturer":"Computers Inc.","Disks":[{"SizeGb":100},{"SizeGb":250},{"SizeGb":500}]}

Это код:

open System
open LiteDB
open LiteDB.FSharp

[<StructuredFormatDisplay("{SizeGb}GB")>]
[<CLIMutable>]
type Disk = 
    { SizeGb : int }

[<StructuredFormatDisplay("Computer #{Id}: {Manufacturer}/{Disks}")>]
[<CLIMutable>]
type Computer =
    { Id: int
      [<BsonIgnore>] Ignore : string
      Manufacturer: string
      Disks: Disk list }

[<EntryPoint>]
let main argv =

    let myPc =
        { Id = 0
          Ignore = "ignore"
          Manufacturer = "Computers Inc."
          Disks =
            [ { SizeGb = 100 }
              { SizeGb = 250 }
              { SizeGb = 500 } ] }

    let mapper = FSharpBsonMapper()
    use db = new LiteDatabase("micompany.db", mapper)
    let computers = db.GetCollection<Computer>("computers")

    // Insert & Print
    computers.Insert(myPc) |> ignore
    printfn "%A" myPc

    0 // return an integer exit code

С другой стороны, атрибут [<StructuredFormatDisplay>]Запись Disk записана неправильно (в консоли отображаются только несколько точек), когда запись Computer печатается с printfn "%A" myPc.Вывод:

Computer #12: Computers Inc./[...GB; ...GB; ...GB]

Есть что-нибудь еще, что я должен сказать?

...