哪个.net ORM可以处理这种情况

时间:2008-12-19 14:07:00

标签: .net orm

previous question开始,我了解到Linq to SQL无法只加载foreingKey表的某些文件。

所以我问.net ORM可以支持在实体类中包含这种类型的语句,只需要一次DB调用,而不用手动将结果映射到对象。

  -- simplified for clarity
  SELECT Order.*, Product.Name, Customer.Name, OrderType.Name, Provider.Name
  FROM Order
      INNER JOIN Product on Order.ProductID = Product.ProductID
      INNER JOIN Customer on Order.CustomerID = Customer.CustomerID
      INNER JOIN OrderType on Order.OrderTypeID = OrderType.OrderTypeID
      INNER JOIN Provider on Order.ProviderID = Provider.ProviderID

我想尽量保持简单(试图避免使用NHibernate等)

3 个答案:

答案 0 :(得分:3)

作为投影的一部分,LINQ-to-SQL应该处理 - 你试过吗

select new {Order = order, ProductName = order.Product.Name,
             CustomerName = order.Customer.Name,
             OrderType = order.OrderType.Name } // etc

如果您希望这些属性成为对象模型本身的一部分......更棘手,而不是与实体相关。您可以在分部类中添加属性,但是您必须执行许多加载选项才能使它们急切加载。实际上,鉴于它如何使对象模型复杂化,它可能是不值得的。

答案 1 :(得分:1)

DataObjects.Net以与LINQ 2 SQL完全相同的方式处理它:

from order in Query<Order>.All
where ...
select new {
  Order = order, 
  ProductName = order.Product.Name,
  CustomerName = order.Customer.Name,
  OrderType = order.OrderType.Name 
}

答案 2 :(得分:0)

有些时候你只需要“自己做”,而不是依赖ORM来完成特定的功能。这可能是其中之一。您可以将此信息放入存储过程,并将对象作为参数传递。