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éesdatetime
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.