Дублированные элементы в документах с использованием наследования классов - PullRequest
0 голосов
/ 18 января 2019

Я использую C # драйвер MongDB 2.7.2 (сервер 4.0.5) с моим приложением и пытаюсь вставить эту модель:

abstract class ModelBase
{
    public virtual int Duration { get; set; }
    public virtual DateTime EndDate { get; set; }
    public virtual DateTime StartDate { get; set; }
}

class MongoModel : ModelBase
{

   [BsonElement("_id")]
   public ObjectId Id { get; set; }

   [BsonElement("duration")]
   public override int Duration { get; set; }

   [BsonElement("end_date")]
   public override DateTime EndDate { get; set; }

   [BsonElement("start_date")]
   public override DateTime StartDate { get; set; }
}

Я использую наследование этого класса, потому что хочу иметь возможность создавать MongoBase (MongoDB), DynamoBase (AWS) и т. Д.

Но при вставке отображается следующий документ (с дублированными элементами):

class MongoDBDataProvider : DataProvider
{
    private MongoClient _client;
    public MongoDBDataProvider(string endpoint) : base(endpoint)
    {
        _connectionString = $"mongodb://{_endpoint}";
        _client = new MongoClient(_connectionString);
    }


    public override async Task Insert(ModelBase src)
    {
        var coll = GetCollection();
        await coll.InsertOneAsync((MongoModel)src);
    }

    private IMongoCollection<MongoModel> GetCollection()
    {
        IMongoDatabase db = _client.GetDatabase("db");
        return db.GetCollection<MongoModel>("coll");
    }
}

Результат:

_id:5c4123116b2940340551785f
Duration:10
EndDate:2020-02-02 05:02:00.000
StartDate:2020-02-02 05:02:00.000
duration:10
end_date:2020-02-02 05:02:00.000
start_date:2020-02-02 05:02:00.000

Почему это происходит? Любой намек? Что я делаю не так?

1 Ответ

0 голосов
/ 18 января 2019

с использованием атрибута BsonIgnore для игнорирования свойства

public interface ModelBase
{
    int Duration { get; set; }
    DateTime EndDate { get; set; }
    DateTime StartDate { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...