0

C#ドライバーを使用して「FindAndModify」しようとしているコレクションがMongoDBにあります。このコレクションは、次のように、基本クラスとその派生クラスのタイプを保持します。

    [BsonDiscriminator(RootClass = true)]
    public class Father
    {
        public Guid Id { get; private set; }
    }

   public class Son : Father
   {
        public string SomeProperty { get; private set; }
   }

BsonDocumentを基本クラスにキャストしようとすると、FindAndModifyの後で、結果は「Son」になります。

Father modifiedDocument = result.GetModifiedDocumentAs<Father>();

次の例外が発生します。

System.IO.FileFormatException:要素'SomeProperty'は、Fatherクラスのどのフィールドまたはプロパティとも一致しません。

なぜですか?-ここでダウンキャストできませんか?

ありがとう、ニール。

4

1 に答える 1

0

ロード時に「Son」タイプのクラス マップを登録することで、この問題を解決できました。私が使用しているコードへの参照は次のとおりです。

    if (!BsonClassMap.IsClassMapRegistered(typeof(T)))
    {
        BsonClassMap.RegisterClassMap<T>
        (cm =>
        {
            cm.AutoMap();
        });
    } 

これが誰かに役立つことを願っています。

乾杯、ニル。

于 2012-09-22T08:27:38.037 に答える