La conversion c # d'un type de données datetime2 en un type de données datetime a entraîné une valeur hors plage

Je suis en train de créer un site C # Asp.net MVC. L'un des templates est SystemUser comme indiqué ici

 public class SystemUser : DefaultModel { public int Id { get; set; } [Required] [SsortingngLength(50, ErrorMessage = "First name cannot be longer than 50 characters.")] [Column("FirstName")] [Display(Name = "First Name")] public ssortingng FirstName { get; set; } [Required] [SsortingngLength(50)] [Display(Name = "Last Name")] public ssortingng LastName { get; set; } [Display(Name = "Full Name")] public ssortingng Name { get { return ssortingng.Format("{0},{1}", this.FirstName, this.LastName); } } [DataType(DataType.Date)] [DisplayFormat(DataFormatSsortingng = "{0:dd-MM-yyyy}", ApplyFormatInEditMode = true)] [Display(Name = "Hire Date")] public DateTime HireDate { get; set; } [Required] public int inactive { get; set; } public virtual ApplicationUser User { get; set; } public ssortingng ApplicationUserId { get; set; } } 

La table de database SQL Server def ressemble à ceci

 CREATE TABLE [dbo].[SystemUser] ( [Id] INT IDENTITY (1, 1) NOT NULL, [LastName] NVARCHAR (50) NOT NULL, [FirstName] NVARCHAR (50) NOT NULL, [HireDate] DATETIME NULL, [inactive] INT NOT NULL, [ApplicationUserId] NVARCHAR (128) NULL, [CreatedDate] DATETIME DEFAULT (getdate()) NOT NULL, [UpdatedDate] DATETIME DEFAULT (getdate()) NOT NULL, [UpdatedUserId] INT DEFAULT ((0)) NOT NULL, CONSTRAINT [PK_dbo.SystemUser] PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_dbo.Person_dbo.AspNetUsers_ApplicationUserId] FOREIGN KEY ([ApplicationUserId]) REFERENCES [dbo].[AspNetUsers] ([Id]) ); GO CREATE NONCLUSTERED INDEX [IX_ApplicationUserId] ON [dbo].[SystemUser]([ApplicationUserId] ASC); 

Lorsque vous utilisez la page d'inscription sur le site, les informations d'identification sont traitées dans AccountController par défaut. J'ai modifié cela pour créer également un SystemUser en ajoutant quatre lignes de code dans la méthode Register comme indiqué ici.

 if (result.Succeeded) { var db = new ApplicationDbContext(); var systemUser = new SystemUser { FirstName = model.FirstName, LastName = model.LastName, inactive = 0, ApplicationUserId = user.Id, HireDate = DateTime.Now }; db.SystemUsers.Add(systemUser); db.SaveChanges(); 

Lorsque AspNetUsers le traitement de l'logging, l'logging est inséré dans la table AspNetUsers OK, puis je reçois une exception sur le db.SaveChages(); appelez comme suit,

La conversion d'un type de données datetime2 un type de données datetime entraîné une valeur hors plage. La déclaration a été résiliée.

 Line 160: var systemUser = new SystemUser { FirstName = model.FirstName, LastName = model.LastName, inactive = 0, ApplicationUserId = user.Id, HireDate = DateTime.Now }; Line 161: db.SystemUsers.Add(systemUser); Line 162: db.SaveChanges(); Line 163: Line 164: await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false); 

DATETIME est limité au 1er janvier 1753 00:00:00, jusqu'au 31 décembre 9999 23: 59: 59.997, alors assurez-vous de ne transmettre aucune autre valeur.

Vous pouvez changer le type de vos champs DATETIME en DATETIME2 ou append une validation supplémentaire.

Vous pouvez simplement modifier votre table pour utiliser datetime2 au lieu du type datetime pour la colonne HireDate.