Tengo una base de datos de SQL Server con una tabla con los siguientes campos:¿Cómo me aseguro de que Linq a Sql no anule ni viole valores predeterminados de DB que no aceptan nulos?
- Un
bit
con el valor predeterminado 1,NOT NULL
. - A
smalldatetime
con el valor predeterminadogettime()
,NOT NULL
. - Un
int
sin valor predeterminado,IDENTITY
,NOT NULL
.
Cuando genero LINQ to SQL para esta tabla, ocurre lo siguiente:
- El
bit
se da ningún tratamiento especial. - El
smalldatetime
no ofrece un tratamiento especial. - El
int
está marcado comoIsDbGenerated
.
Esto significa que cuando hago insertos utilizando LINQ a SQL, sucederá lo siguiente:
- El
bit
se enviará como 0, anulando el valor predeterminado. ¿Correcto? - El
smalldatetime
se enviará como unSystem.DateTime
sin inicializar, produciendo un error en el servidor SQL, ya que no se corresponde con el rango de Smalldatetime de SQL Server. ¿Correcto? - No se enviará
IsDbGenerated
int
; el DB generará un valor que Linq to SQL luego volverá a leer.
¿Qué cambios debo hacer para que este escenario funcione?
En resumen: quiero campos que no admiten nulos con valores predeterminados asignados por DB, pero no los quiero IsDbGenerated
si significa que no puedo proporcionarles valores cuando realizo actualizaciones o inserciones utilizando Linq a SQL. Tampoco los quiero IsDbGenerated
si esto significa que tengo que modificar a mano el código generado por Linq a SQL.
EDITAR: La respuesta parece ser que esta es una limitación en el actual Linq a SQL.
Duplicado: http://stackoverflow.com/q/1120858/11683 (no votando para cerrar, ambos son igualmente útiles). – GSerg