Composable究竟意味着什么?

时间:2010-12-19 22:49:57

标签: .net entity-framework

我目前正在阅读Larry Tenny和Zeeshan Hirani撰写的EF4食谱。在阅读这本书的过程中,我偶然发现了“可组合”这个词。我对这个词的含义有一般意义,但没有确切的定义。

我想知道确切的定义是什么,&是什么使(比如说)功能“可以合成”?

有关更多上下文,请检查此FAQ(在页面上查找单词“可组合”,只有一个),这与书中的相同上下文非常相似..

这是一个段落,我对它的含义感到困惑(来自第397页):

  

定义模型的参数   功能不显示方向。那里   没有'出'参数,只暗示   'in'参数。原因就在于此   是模型定义的函数是什么   可组合,可以作为其中的一部分使用   LINQ查询。这可以防止他们   返回输出参数中的值。

2 个答案:

答案 0 :(得分:6)

从这个意义上讲,可组合性意味着您可以进一步优化查询。

EF查询非常易于组合。因此,您可以进行查询并进行更改:

var q = Context.MyStuff;
q = q.Where(s => s.IsGood);
var r = from s in q select new { Id = s.Id, Description = s.Description };
r = r.OrderBy(s => s.Description);
r = r.Take(100);

所有这些工作都将在数据库服务器上完成,因为最终查询是组成的部分,在上面的代码中构建。

WCF数据服务OTOH受到更多限制。您可以投影,也可以订购,但不能订购投影。所以上面的代码不起作用,虽然可以调整并重新命令工作。

答案 1 :(得分:2)

它指的是一种叫做模型定义函数的东西。

基本上,您在EDMX中定义了这些MDF,然后您可以在LINQ语句中“组合”这些查询。

例如,假设您的数据库中有一个标量UDF,它返回了一个人的年龄,那么您可以将其映射到概念模型中并执行此操作:

var results = from person in ctx.People
              where GetAge(person) > 35 // GetAge is a UDF mapped in your EDMX
              select person;

有一篇文章here可以解释一下。

我没有太多使用它们 - 但我相信它有一些限制(例如你不能使用Table-Value函数,只能使用Scalar)。

HTH