LLBGen для чайников

1

У меня есть "возможность" работать с LLBLGEN ORM, я уже потратил два дня на попытку запросить команду JOIN по нескольким таблицам (без каких-либо успехов). Теперь дома я также пытаюсь понять логику этого ORM по более мелкому проекту (т.е. Recruiter-> JobOffer-> Candidate). И все же эта часть программного обеспечения ковыряет мою задницу. Поэтому я пошел в документацию и попытался получить некоторые знания с, к сожалению, без каких-либо успехов.

Поэтому я спрашиваю здесь, есть ли где-то учебник для реальных манекенов, который легко объясняет очень фундаментальное использование LLBLGEN:

  • где (хорошо, я уже получил это)
  • присоединиться
  • multi join

Возможно, у кого-то есть код и db, которые могут делиться и иллюстрировать эти концепции, сделанные дружелюбно.

Благодарю!

  • 2
    Форумы и поддержка LLBL превосходны, поэтому, если у вас есть конкретные вопросы, задавайте их там. Кроме того, если вы имеете дело с путями предварительной выборки, прочитайте эту замечательную статью (не мной): llblgening.com/archive/2009/10/prefetchpaths-in-depth
  • 0
    Спасибо за ссылку. Я думаю, что это лучшее и самое близкое, что я искал.
Показать ещё 1 комментарий
Теги:
llblgen

2 ответа

1

Соединения выражаются с помощью объекта Relation. Если вы хотите получить все кандидаты от конкретного рекрутера, вы можете написать что-то вроде этого, поскольку таблицы имеют правильные отношения с внешним ключом

var list = new CandidateCollection();
var relationsToUse = new RelationCollection
{
  JobOfferEntity.Relations.CandidateEntityUsingCandidateId,
  RecruiterEntity.Relations.JobOfferEntityUsingJobOfferId
};
var filter = new PredicateExpression
{
  new FieldCompareValuePredicate(RecruiterFields.Id, ComparisonOperator.Equal, recruiterId)
};
list.GetMulti(filter, relationsToUse);
1

В LLBLGen есть некоторые центральные понятия, которые я объясню с помощью образцов кода и эквивалентного запроса Sql.

  1. Predicate, IPredicate и PredicateExpression: они переведены в предложения Where. Вы можете представить PredicateExpression как сложный предикат, состоящий из нескольких предикатов, соединенных с AND и OR.

Примечание. Обращайтесь к фрагментам кода ниже как псевдокод, так как у меня нет доступа к LLBLGen прямо сейчас.

    var pred = CustomerFields.Id == 5;
    new DataAccessAdapter.FetchEntityCollection(coll, new RelationPredicateBucket(pred));

Это примерно соответствует:

  SELECT * FROM Customer WHERE Id = 5

Вы можете комбинировать несколько предикатов, используя PredicateExpression:

   var predEx = new PredicateExpression();
   predEx.Add(CustomerFields.Id == 5);
   predEx.AddWithOr(CustomerFields.Name == "X");

Эквивалентно:

   SELECT * FROM Customer WHERE Id = 5 OR Name = 'X'
  1. Отношения: отношения представляют собой отношения в вашей базе данных. В свойствах отношений в каждом Entity есть сгенерированный код, который содержит все отношения этого объекта. Например, если у вас есть таблица Customer, которая имеет отношение "один ко многим" к вашей таблице "Заказ", соответствующие объекты будут иметь свойство static Relations, которое содержит эти отношения:

    CustomerEntity.Relations.OrderEntityUsingCustomerId; OrderEntity.Relations.CustomerEntityUsingCustomerId;

Вы используете эти отношения, когда хотите выполнить соединение и вернуть результаты на основе соединения. Например, если вы хотите получить всех клиентов, у которых есть порядок, который varlue больше 50000, вы делаете это:

var pred = OrderFields.Value > 50000;
var rpb = new RelationPredicateBucket();
rpb.PredicateExpression.Add(pred);
rpb.Relations.Add(CustomerEntity.Relations.OrderEntityUsingCustomerId);//perform join

Это приведет к:

SELECT C.* FROM Customer AS C JOIN Order AS O ON C.Id = O.CustomerId WHERE O.Value > 50000

Для множественных объединений вы просто добавляете больше отношений, чтобы получить у клиента заказы со значениями выше 50000, у которых есть OrderDetail, количество которых больше 1:

var pred = OrderFields.Value > 50000 & OrderDetailFields.Quantity > 1;
var rpb = new RelationPredicateBucket();
rpb.PredicateExpression.Add(pred);
rpb.Relations.Add(CustomerEntity.Relations.OrderEntityUsingCustomerId);//perform customer and order join
rpb.Relations.Add(OrderEntity.Relations.OrderDetailEntityUsingOrderId);//perform order and order detail join

Что создает этот sql-запрос:

SELECT C.* FROM Customer AS C JOIN Order AS O ON C.Id = O.CustomerId JOIN OrderDetail AS OD ON OD.OrderId = O.Id WHERE O.Value > 50000 AND OD.Quantity > 1

Ещё вопросы

Сообщество Overcoder
Наверх
Меню