tutorial mvc framework example ejemplo entity-framework-4 edmx

entity framework 4 - mvc - Entity Framework: ¿Dónde extiendo el CSDL/MSL?



entity framework sql server (1)

Estoy usando Entity Framework 4. Estoy usando un primer modelo de base de datos, lo que significa que generé el EDM a partir de la base de datos. Ahora quiero agregar algunas funciones definidas por el modelo. Mi pregunta es ... ¿dónde?

Si los coloco en el archivo .edmx, ¿no se eliminarán todas mis adiciones la próxima vez que actualice la base de datos y genere el nuevo EDM? Quiero decir que lo dice allí mismo, en la parte superior del archivo .Designer.cs, "Los cambios manuales en este archivo se sobrescribirán si el código se regenera".

Entonces, ¿en qué archivo pongo mis adiciones?


Me abarcaré un poco porque las funciones definidas por el modelo no son muy conocidas.

Las funciones definidas por el modelo deben agregarse manualmente a la parte CSDL del archivo EDMX. Debe abrir el archivo como XML y agregar una función. Por ejemplo, esta función definida por el modelo puede producir el nombre completo del empleado:

<Function Name="FullName" ReturnType="Edm.String"> <Parameter Name="emp" Type="TestModel.Employee" /> <DefiningExpression> Trim(emp.FirstName) + " " + Trim(emp.LastName) </DefiningExpression> </Function>

Ahora puedes guardar tu EDMX y volver al diseñador. La función seguirá presente, pero no estará visible en el navegador de modelos. Puede actualizar su modelo desde la base de datos o eliminar todas sus entidades, pero la función aún estará definida. EF no elimina la modificación personalizada en la parte CSDL de EDMX.

Ahora necesita definir la función .NET para poder usar esta función definida por el modelo. Puedes hacerlo en cualquier lugar. Una forma es usar una clase parcial para contextualizar, pero al mismo tiempo puedes usar algunas clases cutom:

public static class EdmFunctions { [EdmFunction("TestModel", "FullName")] public static string FullName(Employee e) { throw new NotSupportedException("This function is only for L2E query."); } }

Y ya está hecho. La única tarea restante es usar la función en la consulta de Linq a entidades:

using (var context = new TestEntities()) { var query = from e in context.Employees select new { e.Id, FullName = EdmFunctions.FullName(e) }; var data = query.ToList(); ... }

Las funciones definidas por el modelo son solo algunos Entity SQL reutilizables que se traducen a SQL, por lo que solo se pueden utilizar en consultas de Linq-to-units. Las funciones definidas por el modelo pueden ser mucho más complicadas.