Как настроить имя коллекции MongoDb на .Net Core Model? - PullRequest
0 голосов
/ 26 сентября 2019

Не могу найти аннотацию для MongoDb, что в модели .Net Core может изменить имя коллекции.В базе данных SQL это будет [Таблица ("all_sessions")].

Имя моей модели и имя коллекции отличаются.Я не изменил название модели или коллекции.

public class Session
    {
        [BsonId]
        [BsonRepresentation(BsonType.ObjectId)]
        [BsonElement("_id")]
        public string Id { get; set; }

        [BsonElement("expires")]
        public string Expires { get; set; }

        [BsonElement("session")]
        public string Session { get; set; }
    }

Моя коллекция называется all_sessions.Я ожидаю получить рабочую модель сеанса с коллекцией all_sessions.

1 Ответ

0 голосов
/ 26 сентября 2019

Итак, некоторое время назад я занимался аналогичной проблемой и создал собственную реализацию этого паттерна.

Итак, первая часть заключается в создании пользовательского атрибута:

[AttributeUsage(AttributeTargets.Class, Inherited = false)]
public class BsonCollectionAttribute : Attribute
{
    private string _collectionName;
    public BsonCollectionAttribute(string collectionName)
    {
        _collectionName = collectionName;
    }
    public string CollectionName => _collectionName;
}

Вторая часть - получение значения этого атрибута с отражением

private static string GetCollectionName()
{
    return (typeof(T).GetCustomAttributes(typeof(BsonCollectionAttribute), true).FirstOrDefault()
        as BsonCollectionAttribute).CollectionName;
}

Я так и делаюв классе репозитория пример метода из класса mthat выглядит так:

        public async Task InsertOne(T model)
        {
            var collectionName = GetCollectionName();
            var collection = Database.GetCollection<T>(collectionName);
            await collection.InsertOneAsync(model);
        }

В конце моя модель выглядит так:

[BsonCollection("Users")]
public class User
{
    [BsonId]
    [BsonElement("id")]
    [BsonRepresentation(BsonType.String)]
    public Guid Id { get; set; }

    [BsonElement("name")]
    public string Name { get; set; }
    [BsonElement("email")]
    public string Email { get; set; }
    [BsonElement("password")]
    public string Password { get; set; }

Надеюсь, что я помог;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...