Игнорировать [BsonIgnore] при использовании BsonSerializer.Deserialize () - PullRequest
0 голосов
/ 31 октября 2019

У меня есть класс «Пользователь» со списком организаций. С [BsonIgnore] я не спасаю организации. Они в другой коллекции. Вот почему «Пользователь» также имеет список идентификаторов организаций. Это прекрасно работает.

public class User
{
    public ObjectId _id { get; set; }
    public List<ObjectId> OrganisationIds { get; set; }
    [BsonIgnore]
    public List<Organisation> Organisations { set; get; }
}

Проблема

Проблема заключается в том, что я делаю запрос, чтобы получить пользователя и его организации. При десериализации BsonDocument он выдает исключение. Что-то вроде: «Организации» в «Пользователь» не существует.

var aggregation = _userService.GetCollection()
    .Aggregate<User>()
    .Lookup<User>("Organisations", "OrganisationId", "_id", "Organisation");

var firstUser = aggregation.FirstOrDefault();

var user = BsonSerializer.Deserialize<User>(firstUser);

Я не хочу сохранять организации в пользователе. Как мне подойти к этому?

1 Ответ

0 голосов
/ 05 ноября 2019

[BsonIgnore] вызвал проблему. Он не жаловался на отсутствие такого поля, но жаловался при агрегировании.

У меня есть следующее, и оно работает>

public class User
{
    public ObjectId _id { get; set; }
    public List<ObjectId> OrganisationIds { get; set; }
}

public class UserAggregate
{
    public List<ObjectId> OrganisationIds { get; set; }
    public ObjectId _id { get; set; }
    public List<Organisation> Organisations { set; get; }
}

public class Organisation
{
    public ObjectId _id { get; set; }
    public string Name { get; set; }
}

string connectionString = "mongodb://localhost:27017";
var client = new MongoClient(connectionString);

var db = client.GetDatabase("test");
    var instances = db.GetCollection<User>("Users");
var instances2 = db.GetCollection<Organisation>("Organisations");
var aggregation = instances.Aggregate().Match(...).Lookup(foreignCollection: instances2,
        localField: x => x.OrganisationIds, foreignField: x => x._id,
        @as: (UserAggregate pr) => pr.Organisations)
    .ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...