MongoDB C# Controlador: Ignorar Propiedad en Insertar

Estoy con la Oficial de MongoDB C# Unidad de v0.9.1.26831, pero me preguntaba dado un POCO de clase, es de todos modos hay que ignorar ciertas propiedades de llegar insertado.

Por ejemplo, tengo la siguiente clase:

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

Hay una manera, para el IsOwner a no ser introducidos al insertar una GroceryList objeto?
Básicamente, que obtiene el objeto de la base de datos, a continuación, establezca el IsOwner de la propiedad en la aplicación de la capa y, a continuación, volver al controlador, que asigna el objeto a un modelo de vista.

Espero que mi pregunta tiene sentido. gracias!

  • ¿Has solucionado tu problema?
  • Sí, he utilizado el BsonIgnore atributo en el IsOwner de la propiedad y que se solucionó el problema. gracias!
InformationsquelleAutor Abe | 2011-02-03

5 Kommentare

  1. 52

    Parece que el [BsonIgnore] atributo hizo el trabajo.

    public class GroceryList : MongoEntity<ObjectId>
    {
        public FacebookList Owner { get; set; }
        [BsonIgnore]
        public bool IsOwner { get; set; }
    }
  2. 15

    También puede hacer IsOwner que aceptan valores null y agregar [BsonIgnoreExtraElements] para agujero de la clase:

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

    Propiedad con valor null será ignorado durante searilization.
    Pero creo que [BsonIgnore] será mejor para su caso.

    • si yo uso ambos [BsonIgnoreExtraElements] y [BsonIgnore], a continuación, todas las propiedades de haber [BsonIgnore] anotación sería ignorado no, independientemente de que hay valores, mientras que el resto a tener valores null también sería ignorado. La correcta?
    • ignorar los campos de la bd que no está en su clase cuando se carga un documento. BsonIgnore campo ignorar al cargar/guardar un documento.
  3. 14

    Alternativamente, si usted no desea utilizar el atributo por alguna razón (por e. g. en caso de que no desee llevar un extra de dependencia a MongoDB.Bson para su DTO), puede hacer lo siguiente:

    BsonClassMap.RegisterClassMap<GroceryList>(cm =>
    {
      cm.AutoMap();
      cm.UnmapMember(m => m.IsOwner);
    });
  4. 4

    Debe probablemente quiere combinar los dos atributos BsonIgnoreExtraElements y BsonIgnore.
    La razón por la que es aunque BsonIgnore no inserte el «IsOwner» propiedad DB, pero si usted tiene la «vieja» instancias en la DB que contiene este campo y se le quite esta ámbitos de su modelo en la función o extender su «GroceryList» de la clase y el uso de la nueva clase en el DB se obtiene una excepción:

    «Elemento » IsOwner’ no coincide con ninguna de campo o propiedad de la clase.»

    De otra manera (en vez de modificar el modelo de clase) es el uso de «Registro de asignación de Clase» con «SetIgnoreExtraElements» y «UnmapMember» juntos.

    En su caso sólo tienes que añadir este código al inicializar el controlador:

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

    Usted puede leer más acerca de Mongo Asignación de Clase en:

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

  5. 3

    Sólo en caso de que alguien podría estar interesado en otra forma de hacerlo. A través de convenios:

    public class IgnoreSomePropertyConvention : ConventionBase, IMemberMapConvention
    {
        public void Apply(BsonMemberMap memberMap)
        { //more checks will go here for the case above, e.g. type check
            if (memberMap.MemberName != "DoNotWantToSaveThis")
                memberMap.SetShouldSerializeMethod(o => false);
        }
    }

    Y entonces usted necesita para registrar este convenio una vez durante la aplicación de inicio:

    ConventionRegistry.Register("MyConventions", new ConventionPack { new IgnoreBaseIdConvention()  }, t => true);

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea