MongoDB, SQL, доступ к общему базовому абстрактному классу C# - PullRequest
0 голосов
/ 17 марта 2020

Доброе утро, учитывая, что я не обладаю обширными знаниями о базах данных, меня попросили разработать обобщенный класс c MongoDB, производный от абстрактного класса Database, и реализовать "Вставить", "Выбрать", "Обновить" и " Удалить "методы для MongoDB, используя синтаксис SQL в качестве входных данных. У меня возникают трудности при преобразовании запросов, подобных этому

SELECT auto,Part,Entity_ID,Pos_Z 
FROM Nesting 
WHERE Part='033TRAVERSOLATERALE3' or (Part='033TRAVERSOLATERALE1' and Pos_Z=-90)
ORDER BY Pos_Z ASC, Entity_ID DESC

в MongoDB, также с помощью Aggregation Framework. Может кто-нибудь сказать мне, есть ли пакет Nuget или фрагмент кода, который уже выполняет преобразование запроса? Я нашел несколько полезных инструментов, но никаких библиотек или источников. Нет ли другого способа, кроме разбора строки аргумента SQL WHERE для преобразования запроса?

Part='033TRAVERSOLATERALE3' or (Part='033TRAVERSOLATERALE1' and Pos_Z=-90)

в стадию совпадения MongoDB $ с этим аргументом:

{
$or:[{Part: {$eq:'033TRAVERSOLATERALE3'}}, {$and:[{Part: {$eq:'033TRAVERSOLATERALE1'}}, {Pos_Z: {$eq:-90}}]}]
}

или

BsonDocument filter = new BsonDocument();
            filter.Add("$or", new BsonArray()
                    .Add(new BsonDocument()
                            .Add("Part", "033TRAVERSOLATERALE3")
                    )
                    .Add(new BsonDocument()
                            .Add("$and", new BsonArray()
                                    .Add(new BsonDocument()
                                            .Add("Part", "033TRAVERSOLATERALE1")
                                    )
                                    .Add(new BsonDocument()
                                            .Add("Pos_Z", new BsonInt64(-90L))
                                    )
                            )
                    )
            );

Любая помощь для этой "грязной" работы будет принята с благодарностью. Спасибо

1 Ответ

0 голосов
/ 28 апреля 2020

Когда я понял проблему лучше, ответ пришел сам собой.

Обработка каждой таблицы SQL (коллекция ~ MongoDB) как класса POCO и определение интерфейса для методов доступа к хранилищу - все о соответственно. Каждый класс репозитория, который реализует интерфейс, будет указан c для выбранной базы данных.

Для получения дополнительной информации: https://en.wikipedia.org/wiki/Database_abstraction_layer

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