4
I am mounting an example of Code First, but when saving a field of type Datetime in the database returns me the following error
Conversion of a datetime2 data type into a datetime data type resulted in a value outside the range. r the instruction has been completed.
em System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update() em System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.<Update>b__2(UpdateTranslator ut) em System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update[T](T noChangesResult, Func\`2 updateFunction) em System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update() em System.Data.Entity.Core.Objects.ObjectContext.<SaveChangesToStore>b__35() em System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func\`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess) em System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction) em System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass2a.<SaveChangesInternal>b__27() em System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation) em System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options, Boolean executeInExistingTransaction) em System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options) em System.Data.Entity.Internal.InternalContext.SaveChanges()
This happens as I call it ctx.SaveChanges();
.
using Modelo.Classes.Banco;
using Modelo.Classes.Contexto;
using System;
using System.Linq;
namespace AppConsoleTestes
{
class Program
{
static void Main(string[] args)
{
using (var ctx = new dbContexto())
{
var usuario = new Usuarios();
usuario.nomeUsuario = "Marconcilio das Virgens";
usuario.senha = "123456";
usuario.senhaTemp = true;
usuario.ativo = true;
usuario.bloqueado = false;
usuario.dtInclusao = DateTime.Now;
usuario.dtAdmissao = DateTime.Now;
usuario.dtInclusao = DateTime.Now;
ctx.Usuarios.Add(usuario);
ctx.SaveChanges();
var teste = ctx.Usuarios.FirstOrDefault();
}
}
}
}
My class in the model;
using System;
using System.ComponentModel.DataAnnotations;
namespace Modelo.Classes.Banco
{
public class Usuarios
{
[Key]
public Int32 idUsuario { get; set; }
[Required, MaxLength(100)]
public string nomeUsuario { get; set; }
[MaxLength(2000)]
public string obsUsuario { get; set; }
[MaxLength(100)]
public string email { get; set; }
[MaxLength(100)]
public string login { get; set; }
[MaxLength(200)]
public string senha { get; set; }
[MaxLength(15)]
public string telefone { get; set; }
[MaxLength(15)]
public string celular { get; set; }
[MaxLength(14)]
public string cpf { get; set; }
[MaxLength(20)]
public string nroMatricula { get; set; }
public DateTime dtAdmissao { get; set; }
public DateTime dtNascimento { get; set; }
[Required]
public bool senhaTemp { get; set; }
[Required]
public bool ativo { get; set; }
[Required]
public bool bloqueado { get; set; }
public DateTime dtInclusao { get; set; }
[Timestamp]
public byte[] SeqAlteracao { get; set; }
}
}
If I comment the fields of type Datetime and change the database with Dbmigration and saved command does not return the error.
I don’t know if I’m doing something wrong or if something’s missing.
In the database the types are being created with the correct type, the only thing I found strange was the line;
ALTER TABLE [dbo]. [Users] ADD DEFAULT ('1900-01-01T00:00:00.000') FOR
for each datetime field
USE [ControleOrcamentario]
GO
/****** Object: Table [dbo].[Usuarios] Script Date: 23/11/2016 16:59:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[Usuarios](
[idUsuario] [int] IDENTITY(1,1) NOT NULL,
[nomeUsuario] [nvarchar](100) NOT NULL,
[obsUsuario] [nvarchar](2000) NULL,
[email] [nvarchar](100) NULL,
[login] [nvarchar](100) NULL,
[senha] [nvarchar](200) NULL,
[telefone] [nvarchar](15) NULL,
[celular] [nvarchar](15) NULL,
[cpf] [nvarchar](14) NULL,
[nroMatricula] [nvarchar](20) NULL,
[senhaTemp] [bit] NOT NULL,
[ativo] [bit] NOT NULL,
[bloqueado] [bit] NOT NULL,
[dtAdmissao] [datetime] NOT NULL,
[dtNascimento] [datetime] NOT NULL,
[dtInclusao] [datetime] NOT NULL,
[SeqAlteracao] [timestamp] NOT NULL,
CONSTRAINT [PK_dbo.Usuarios] PRIMARY KEY CLUSTERED
(
[idUsuario] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Usuarios] ADD DEFAULT ('1900-01-01T00:00:00.000') FOR [dtAdmissao]
GO
ALTER TABLE [dbo].[Usuarios] ADD DEFAULT ('1900-01-01T00:00:00.000') FOR [dtNascimento]
GO
ALTER TABLE [dbo].[Usuarios] ADD DEFAULT ('1900-01-01T00:00:00.000') FOR [dtInclusao]
GO
are the types of data in the database, are incompatible by the current configuration. In the database was created which type of datetime?
– novic
@Virgilionovic, I just edited with this, it seems that this generating correctly, I just found strange what it does with the DEFAULT declaration.
– Marco Souza
what is the bank? and version?
– novic
@Virgilionovic, Microsoft SQL Server 2012 - 11.0.2100.60 (Intel X86) Feb 10 2012 19:13:17 Copyright (c) Microsoft Corporation Express Edition on Windows NT 6.1 <X64> (Build 7601: Service Pack 1) (WOW64)
– Marco Souza
Try this:
usuario.dtInclusao = DateTime.Now.Date
– novic
Try this also: http://answall.com/a/51034/54880
– novic
Have you tried to see if the problem isn’t in the field
TimeStamp
? This then occurs when you try to savenull
in a column of the typedatetime
which is NOT NULL.– Jéf Bueno
@jbueno, I have already done a test without the columns of type datetime and saved nomalmente. resume is not the [Seqalteracao] [timestamp] NOT NULL field, which is causing the error.
– Marco Souza
Well I already had this problem when the Sqlserver was 2008 had this problem, but, it was in the field
datetime
– novic
@Marconciliosouza You are sure that the date format of SQL Server is the same as the OS format (or defined in your application)?
– Jéf Bueno
@jbueno, this I don’t know
– Marco Souza
Well, then start there @Marconciliosouza
– Jéf Bueno