47

私はOfficial MongoDB C# Drive v0.9.1.26831を使用していますが、POCOクラスを考えると、特定のプロパティが挿入されないように無視する方法があるのではないかと思っていました。

たとえば、次のクラスがあります。

public class GroceryList
{
    public string Name { get; set; }
    public FacebookList Owner { get; set; }
    public bool IsOwner { get; set; }
}

GroceryList オブジェクトを挿入するときにIsOwnerが挿入されないようにする方法はありますか? 基本的には、データベースからオブジェクトをフェッチし、アプリ レイヤーで IsOwner プロパティを設定してから、オブジェクトをビュー モデルにマップするコントローラーに戻します。

私の質問が理にかなっていることを願っています。ありがとう!

4

5 に答える 5

69

[BsonIgnore] 属性が機能したようです。

public class GroceryList : MongoEntity<ObjectId>
{
    public FacebookList Owner { get; set; }
    [BsonIgnore]
    public bool IsOwner { get; set; }
}
于 2011-02-03T23:13:52.327 に答える
23

または、何らかの理由で属性を使用したくない場合 (たとえば、MongoDB.BsonDTO に余分な依存関係を持ちたくない場合)、次のようにすることができます。

BsonClassMap.RegisterClassMap<GroceryList>(cm =>
{
  cm.AutoMap();
  cm.UnmapMember(m => m.IsOwner);
});
于 2016-03-23T09:59:21.380 に答える
19

IsOwnerまた、 Nullable に[BsonIgnoreExtraElements]してクラス全体に追加することもできます。

[BsonIgnoreExtraElements]
public class GroceryList : MongoEntity<ObjectId>
{
    public FacebookList Owner { get; set; }
    public bool? IsOwner { get; set; }
}

値を持つプロパティはnull、シリアル化中に無視されます。しかし、私[BsonIgnore]はあなたの場合により良いと思います。

于 2011-02-04T08:35:30.913 に答える
6

BsonIgnoreExtraElements と BsonIgnore の 2 つの属性を組み合わせるとよいでしょう。その理由は、BsonIgnore は「IsOwner」プロパティを DB に挿入しませんが、DB にこのフィールドを含む「古い」インスタンスがあり、機能のモデルからこのフィールドを削除するか、「GroceryList」を拡張する場合です。 " クラスを作成し、DB で新しいクラスを使用すると、例外が発生します。

「要素 'IsOwner' は、クラスのどのフィールドまたはプロパティとも一致しません。」

別の方法 (モデル クラスを編集する代わりに) は、" SetIgnoreExtraElements" および "UnmapMember" と共に" Register Class Map "を使用することです。

あなたの場合、ドライバーを初期化するときに次のコードを追加するだけです。

BsonClassMap.RegisterClassMap<UserModel>(cm =>
{
     cm.AutoMap();
     cm.SetIgnoreExtraElements(true);
     cm.UnmapMember(m => m.IsOwner);
});

Mongo クラス マッピングの詳細については、次を参照してください。

http://mongodb.github.io/mongo-csharp-driver/2.0/reference/bson/mapping/

于 2017-06-29T06:17:37.613 に答える