2010-11-13 14 views
7

al añadir un nuevo disco como ésteCómo insertar valores predeterminados de DB en EF?

ContentContacts c2 = new ContentContacts(); 

c2.updated_user = c2.created_user = loggedUserId; 
c2.created_date = c2.updated_date = DateTime.UtcNow; 

db.ContentContacts.AddObject(c2); 

Me estoy poniendo

Cannot insert the value NULL into column 'main_email_support', table 'SQL2008R2.dbo.ContentContacts'; column does not allow nulls. INSERT fails. The statement has been terminated.

pero el valor por defecto en la base de datos es una cadena vacía como:

alt text

qué estoy obteniendo tal error? No si el EF dice algo así como:

"ohh, it's a null value, so let's add the column default value instead"

+0

¿Está recibiendo el error en la línea AddObject o cuando llama a guardar cambios? –

+0

el error se dispara cuando llamo a 'SaveChanges' – balexandre

Respuesta

6

hice una pequeña prueba, crea una tabla con una columna que tenía un valor por defecto, pero que no permite valores nulos.

Entonces esta instrucción SQL:

INSERT INTO [Test].[dbo].[Table_1] 
     ([TestText]) 
VALUES 
     (null) 

da este error:

Msg 515, Level 16, State 2, Line 1
Cannot insert the value NULL into column 'TestText', table 'Test.dbo.Table_1'; column does not allow nulls. INSERT fails.

El problema aquí es que el inserto especifica todas las columnas, también aquellos con valores por defecto. El inserto intenta actualizar las columnas con valores nulos.

tiene 2 opciones:

  • actualizar la tabla a través de un punto de vista, que no contiene las columnas predeterminadas
  • Ajuste los valores por defecto en su código C#
  • valor

Un defecto es lógica empresarial, por lo que hay un caso para que se establezca en la capa empresarial de su aplicación.

Cuestiones relacionadas