2011-03-19 17 views
5

Uso de Entity Framework uno escribe a menudo consultas tales comomarco de la entidad nombres de tabla autogenerado

var orders = from o in context.Orders.Include("Customer") 
      where o.OrderDate.HasValue && o.OrderDate.Value.Year == 1997 
      orderby o.Freight 
      select o; 

Lo que realmente hace que mi estómago se revuelva es el argumento "Customer" cadena. Me cuesta creer que EF no genere nombres de tablas como constantes en alguna parte. ¿Alguien sabe un mejor enfoque que usar una cuerda? para la opción de búsqueda Include?

Respuesta

6

EF 4.1 ha establecimiento inflexible versión de Incluir utilizable para IQueryable, ObjectQuery y DBQuery. Una vez que añadir referencia a EntityFramework.dll (EF 4.1) se puede añadir usando System.Data.Entity y utilizar la carga ansiosa con expresiones lambda

// get Orders with related Customers 
var orders = from o in context.Orders.Include(o => o.Customer) ... 

Editar:

Si no desea utilizar EF 4.1 cheque this article. Ya lo usé en mi proyecto y estoy contento con él.

+0

genial, pero lo necesito para 4.0 –

+0

4.1 es solo una biblioteca. Aún puede usar 4.0 y vincular la biblioteca para obtener la función. –

1

OMI GetType podría ayudarle a que no sea .edmx archivo donde se almacenan todas las definiciones,

context.Orders.Include(CustomerEntity.GetType.Name or full name) 
+1

No, esto es incorrecto, porque los nombres de las propiedades de navegación se pueden cambiar. –

+0

no tendrá ningún problema, ya que la correlación de edmx se encarga de ello. – paragy

+1

No, si el tipo de propiedad de navegación es "Cliente", puedo cambiar el nombre en Propiedad de navegación en EDMX a "Primer cliente"; sin embargo, cuando se usa .Include ("Cliente"), no se cambiará el nombre, el problema es con refractoring –

1

¿Qué tal

Include(context.Customers.EntitySet.Name) 

?

+1

Desgraciadamente no porque los Clientes son conjuntos de entidades definidos en el modelo, pero 'Incluir' espera el nombre de la propiedad definida en la entidad. El nombre puede diferir del conjunto de entidades. –

1

Puede crear una plantilla de texto que le permitirá generar el código además del código predeterminado de EF. Puede hacer esto haciendo clic con el botón derecho y haciendo clic en "Agregar elemento de generación de código".

En esta plantilla de texto, puede crear sus constantes como lo necesita en "Propiedades del cliente" y crear un nombre constante para cada propiedad de navegación.

http://msdn.microsoft.com/en-us/data/gg558520

+0

suena interesante. Todavía no he jugado con .tt, ¿pueden explicar qué insertar? –

+1

por favor revise mi edición ... –

Cuestiones relacionadas