Я потратил некоторое время, чтобы решить проблему, для которой у меня нет решения до сих пор. У меня есть предопределенная очень большая база данных, структура которой исправлена. Я использую шаблон репозитория для создания уровня абстракции между кодом службы и логикой базы данных. Проблема в том, что мне нужно применить некоторую обработку к объекту базы данных, прежде чем передавать их из репозитория. Таким образом, я не могу напрямую использовать объекты Linq.LINQ, шаблон хранилища и абстракция базы данных
В основном метод хранилища выглядит следующим образом:
public IList<Bookingcode> FindBookingcode(int id) {
return (from b in _db.BOOKINGCODE
where b.ID == id
select new Bookingcode {
Id = b.ID,
Name = b.NAME.Trim()
}).ToList();
}
Это работает хорошо до сих пор. Но у меня есть много объектов, которые должны быть индивидуально составлены. FindBookingcode() должен возвращать почти полный объект с другими объектами, такими как каталоги и т. Д. Моя проблема в настоящее время является то, что я должен переписать отображение много раз, как в этом примере:
public IList<Bookingcode> FindBookingcode(int id) {
return (from b in _db.BOOKINGCODE
join c1 in _db.CATALOG on b.CATALOGID equals c1.ID
where b.ID == id
let refs = (
from bc1 in _db.BOOKINGCODE
join p in _db.PACKAGE on bc1.ID equals p.BOOKINGCODE
join bc2 in _db.BOOKINGCODE on p.PACKAGEREF equals bc2.ID
join c in _db.CATALOG on bc.CATALOGID on bc2.CATALOGID equals c.ID
where bc1.ID == b.ID
select new PackageInfo {
ID = p.ID
BookingcodeRef = new Bookingcode {
ID = bc2.ID,
Catalog = new Catalog { ID = c.ID }
}
})
select new Bookingcode {
ID = b.ID,
PackageInfo = refs.ToList()
}).ToList();
}
У меня также есть некоторые обработки L2O в хранилище, которое собирает возвращенные предметы. Еще одна вещь, к которой у меня нет крутого решения, - это способ сообщить репозиторию, что он должен извлечь, например FindBookingcode (id, includePackageInfo, includeCatalog).
Так вот вопросы:
1) Является ли этот подход совершенно глупо?
2) Можете ли вы направить меня к решению, которое упрощает переназначение?
3) Как реализовать механизм критериев для DDD
У меня теперь есть простой тестовый проект с Entity Framework и реорганизованными som bits. Свойства навигации работают нормально, и поскольку теперь я могу правильно сопоставить отношения 1: n и n: m, я могу сделать IQueryable avilable. Спасибо, что указал мне в этом направлении. Я просто борюсь с EF Designer V1 и добавил некоторые ручные отношения к представлениям, чтобы обработать эту плохую схему базы данных. –