Pregunta

Mi tabla de base de datos es como esto

CREATE TABLE MYBUDGET.tbl_CurrentProperty
(
    [PropID]            INT             NOT NULL  IDENTITY(1,1),
    [UpdatedOn]         DATETIME        NOT NULL,
    [Amount]            MONEY           NOT NULL,
    [Remarks]           VARCHAR(100)    NOT NULL,
)
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT PK_CurrentProperty_PropID PRIMARY KEY ([PropID])
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT DF_CurrentProperty_UpdatedOn DEFAULT (DATEADD(MINUTE,30,DATEADD(HOUR, 5, GETUTCDATE()))) FOR [UpdatedOn]
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT CK_CurrentProperty_Amount CHECK([Amount] > -1)
GO

Estoy usando LINQ a SQL. En C # I necesidad de pasar solamente [Cantidad] y [Observaciones] campos y otros campos se deben utilizar con sus valores por defecto ([PropID] y [UpdatedOn]).

En C # I crear el objeto tbl_CurrentProperties como a continuación,

tbl_CurrentProperties currentProperties = new tbl_CurrentProperties();
currentProperties.Amount = 50.00M;
currentProperties.Remarks = "remarks";

y luego enviar el objeto al contexto de datos. Pero aquí, LINQ asignado '1/1/0001 12:00:00 AM' para el campo UpdatedOn. Pero esto viola la 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM rango de fecha y hora de SQL y que se produzca una excepción. También no puedo asignar un valor NULL manualmente para un campo DateTime ya que no es un tipo anulable. De todos modos tengo que hacer esto para usar su valor por defecto de restricción. ¿Cómo puedo hacer esto?


PD: Quiero utilizar de esta manera porque, Mi base de datos está en línea y usuarios están en diferentes ubicaciones. Así que si he usado DateTime.Now, el tiempo en la máquina del usuario puede ser incorrecto, y lo inserta un valor incorrecto en DB. Necesito usar la hora del servidor SQL siempre.

¿Fue útil?

Solución

de Andrey respuesta es parte de razón. Acabo de probar esto y esto es lo que encontré.

En su diseñador dbml, en su columna UpdatedOn establece lo siguiente:

Auto Generated Value = True 
Nullable = False

A continuación, en una INSERT si usar de SQL Server para mirar el SQL generado, se verá que se UpdatedOn no incluido en el INSERT . Ni siquiera un valor nulo. Esto es importante: para SQL Server para utilizar un valor predeterminado para que Colum, la columna debe omitirse de la INSERT. Si se establece en la Nullable = True UpdatedOn, LINQ a SQL podría será incluida la columna de la INSERT con un valor nulo.

Para su información, inmediatamente después de la INSERT debería haber una SELECT donde LINQ a SQL está recuperando el valor generado automáticamente, por lo que su objeto de entidad tiene el valor más reciente.

Otros consejos

Abra su dbml y encienda "Auto de creación de valor" = cierto para los campos que son generados automáticamente. Usted debe estar todo bien con el paso de los nulos en

recomiendo abrir su archivo DBML usando XML Editor y el cambio de ese tipo de la columna de DateTime a DateTime? permitiendo nulos. Guardar y el código se generará para usted.

Siempre que genera LINQ to SQL DBML mal, es mejor editar usted mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top