LLBGen傻瓜

时间:2014-09-14 08:05:33

标签: c# sql .net llblgen

我有机会与LLBLGEN ORM合作,我已经花了两天时间尝试在几个表上查询JOIN命令(没有任何成功)。现在在家里我也试图理解这个ORM在较小项目上的逻辑(即Recruiter-> JobOffer-> Candidate)。 然而这个软件是我的屁股。所以我去了文档并尝试从中获取一些知识,遗憾的是没有任何成功。

所以我在这里问,是否有一个真正的假人教程,可以很容易地解释LLBLGEN的基本用法:

  • 其中(好吧,我已经涵盖了这个)
  • 加入
  • 多次加入

也许某人有一些代码和数据库,可以以友好的方式分享和说明这些概念。

谢谢!

2 个答案:

答案 0 :(得分: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 :(得分:1)

LLBLGen中有一些核心概念,我将用代码和等效的Sql查询中的示例进行解释。

  1. Predicate,IPredicate和PredicateExpression:这些被转换为Where子句。您可以将PredicateExpression视为一个复杂的谓词,它由多个谓词与AND和OR组合而成。
  2. 注意:将下面的代码段视为伪代码,因为我现在无法访问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. 关系:关系代表数据库中的关系。生成的代码中的每个实体都有一个Relations属性,其中包含该实体的每个关系。例如,如果您的Customer表与Order表具有一对多关系,则相应的实体将具有包含这些关系的静态Relations属性:

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

    2. 如果要执行连接并根据连接返回结果,请使用这些关系。例如,如果您想要获取订单的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且订单数量大于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