2010-12-19 18 views
10

Actualmente estoy leyendo EF4 Recipes, el libro, de Larry Tenny y Zeeshan Hirani. Me encontré con la palabra "Composable" mucho, durante la lectura del libro, & tenía un sentido general sobre lo que significa la palabra, pero sin una definición exacta.¿Qué significa Composable exactamente?

Me preguntaba cuál es la definición exacta, & qué hace (por ejemplo, para) una función "Composable" o no?

Para más contexto, Marque esta FAQ (busque la palabra "Composable" en la página, sólo hay una) que es bastante similar a la del mismo contexto en el libro ..

Aquí hay un párrafo en el que se siente confundido acerca de lo que significa (de la página del libro 397):

Los parámetros para las funciones definidas por el modelo no muestran la dirección. Hay no hay parámetros 'fuera', solo parámetros 'en' implícitos. La razón de esto es que las funciones definidas por el modelo son composable y se pueden usar como parte de consultas LINQ. Esto les impide devolver valores en los parámetros de salida.

Respuesta

6

Compuestabilidad, en este sentido, significa que se puede perfeccionar la consulta.

Las consultas de EF son muy compuestas. Para que pueda tomar una consulta y la cambie:

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); 

Todo este trabajo se llevará a cabo en el servidor de base de datos, debido a que la consulta final es compuesto de sus partes, construido en el código de seguridad.

WCF Data Services, OTOH, son mucho más limitados. Puede proyectar, y puede ordenar, pero no puede ordenar en la proyección. Entonces, el código anterior no funcionará, aunque podría modificarse y reordenarse para funcionar.

2

Se está refiriendo a algo que se llama Modelo funciones definidas.

Esencialmente, usted define estos MDF en su EDMX, luego puede "componer" estas consultas en su instrucción LINQ.

Por ejemplo, digamos que tenía una UDF escalar en su base de datos que devolvió la edad de una persona, entonces se podría trazar en su modelo conceptual y hacer esto:

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

Hay un artículo here cuales lo explica un poco más.

No los he usado demasiado, pero creo que tiene algunas limitaciones (por ejemplo, no puede usar funciones con valores de tabla, solo Scalar).

HTH

Cuestiones relacionadas