2012-01-19 19 views
15

Tengo un procedimiento almacenado de SQL Server que ressembles esto:¿Cómo le digo a Entity Framework Function Import que una columna devuelta por un procedimiento almacenado no puede contener nulos?

CREATE PROCEDURE [jp].[GetFoo] 
    @Guid UNIQUEIDENTIFIER 
AS 

SELECT 
    CONVERT(BIT, (CASE WHEN [dbo].[GetBar](T.Col2) = 3 THEN 1 ELSE 0 END)) IsGetBarCol2EqualToThree 
FROM 
    [dbo].[MyTable] T 
WHERE 
    T.Col1 = @Guid 

Cuando yo función de importación/Obtener información de la columna en la FE, el tipo inferido de la columna es IsGetBarCol2EqualToThree Nullable<bool>. Pero no hay forma de que este campo sea nulo, por lo que me gustaría que fuera solo bool. ¿Hay alguna manera de hacer esto que sea persistente en la actualización (es decir, que no se base en modificar ningún código generado)?

La versión de SQL Server es 2005, estoy usando Visual Studio 2010SP1 con EF 4, el proyecto está compilado contra .net 4.0.

+0

qué pasa si haces este mod. isnull ([dbo]. [GetBar] (T.Col2), 0)? –

+0

Funciona, gracias. ¡Puedes poner eso como respuesta lo aceptaré! –

Respuesta

10

de realizar esta modificación: isnull([dbo].[GetBar](T.Col2), 0)

+1

información Como adicional, descubrí que hay un error en la importación función: la cosa funciona isnull pero hay que quitar la columna de la SP, importarlos, agregue la columna de nuevo (con el cambio ISNULL), y luego importarlo de nuevo . –

+0

@EvrenKuzucuoglu - sí, ciertos cambios no se actualizan utilizando el comando de actualización en la interfaz gráfica de usuario. Usted encontrará que el uso de procedimientos almacenados con EF es un gran dolor en el trasero :( –

+0

@EvrenKuzucuoglu - no es sólo sprocs -. Cambios en las tablas/vistas (columna renombrar, cambio de capacidad de nulos) no están refrescado correctamente en la interfaz de usuario ni –

1

Puede crear tipo complejo y luego modificar la propiedad Posibilidad de nulos del campo generado. Puede ser útil si no quiere cambiar su sp.

paso a paso:

  • abrir su edmx
  • navegador modelo abierto (Ver-> Otro navegador en Windows> Entity Data Model)
  • desplazarse al campo en su tipo complejo generado (* .emdx-> Model-> Tipos complejos-> su tipo-> campo)
  • abrir la ventana de propiedades (presionar F4)
  • entre las propiedades debe haber Nullable. Puede cambiarlo aquí y no se sobrescribirá en la próxima actualización del modelo, pero si recrea el tipo complejo, perderá su ajuste.

Alternativamente, puede abrir edmx como xml y encontrar la misma propiedad.

<ComplexType Name="..."> 
      <Property Type="Int32" Name="..." Nullable="true" /> 

PS: Lo he comprobado en VS2012, EF 5

0

Tienes que maneras de solucionar este problema

1- procedimiento alter ser isnull ("su expresión", 0) y luego actualizar su modelo desde la base de datos y actualización.

2- puedes abrir el modelo de clase y cambiarlo manualmente pero cualquier actualización en el modelo nuevamente, perderás el cambio.

Así que mi opinión es que la primera solución es la mejor.

Cuestiones relacionadas