Прежде всего - извините за долгое время за мой ответ ^^ Я был настолько занят, что забыл ответить.
Джон, ваше решение вполне подходит для решения моей проблемы с переназначением.
DoctaJonez, я использую Linq2SQL. Я провел несколько тестов с Entity Framework, но также и с NHibernate. Корень проблем с отображением состоит в том, что у меня есть заданная схема базы данных, которая иногда очень уродлива. Так что у меня есть много обработки, чтобы получить доступ к данным. NHibernate работает довольно хорошо, и я думаю, что добавлю его в проект в ближайшее время.
Ганс, ваша точка зрения совершенно верна. Но поскольку проект является просто API-интерфейсом запроса к базе данных, записи в базу данных отсутствуют. Это скорее dll со службами, которые используются другими приложениями для получения информации из программного обеспечения для бронирования, которое используется в моей компании.
Вы упомянули «Технические характеристики», что также является хорошим моментом. Поскольку у меня есть огромные поисковые запросы с большим количеством фильтров, мне действительно нужен хороший API для репозитория. Проблема в том, что, например, разные комбинации фильтров также запускают разную логику обработки. Это также должно создать другой SQL, чтобы быть эффективным.
Поскольку я сопоставил объекты и использую Linq to SQL, я не могу заставить спецификации работать так, как они должны. Итак, у меня есть много методов в хранилище для выборки объектов с разными критериями, например:
Bookingcode FindBookingcode(int id);
Bookingcode FindBookingcode(string code, string catalog);
List<Bookingcode> FindBookingcode();
List<Bookingcode> FindBookingcode(int[] ids);
List<Bookingcode> FindBookingcode(string code);
List<Bookingcode> FindBookingcode(string[] codes);
List<Bookingcode> FindBookingcodes(Catalog catalog);
Поскольку я не использую IQueryable, я не могу связать такие вещи, как
repo.GetBookingcodes().WithCatalog("WI09").WithCode("XYZ10001");
Для больших интерфейсов, таких как Searches, я использую объекты фильтра, например, так:
srv.SearchTransactions(new TransactionSearchFilter {
Customer = 1234, Destination = "DXB", ExtractServices = true });
Затем в хранилище есть некоторая логика для извлечения материала из базы данных. В репозитории я тестирую, чтобы заставить работать что-то вроде этого
repo.QueryTransactions()
.Include<Customer>()
.Include<TransactionsService>()
.FilterBy(TransactionSearchFilter.Customer, 1234)
.FilterBy(TransactionSearchFilter.Destination, "DXB")
.Execute();
, который внутренне создает критерий / спецификацию. Но это действительно похоже на Entity Framework, и, возможно, если я буду глубже, я смогу использовать его или NHibernate.
Самыми проблемными разделами в моем репозитории являются поиски, потому что при необходимости создается некий динамический SQL с точки зрения производительности. Я поиграл с PredicateBuilder, но не смог решить некоторые запросы, в которых я изменяю / включаю объединения таблиц, если установлены определенные фильтры.
Я думаю, мне нужно «отсканировать» больше документации. Спасибо за ваши ответы.