web-dev-qa-db-fra.com

comment insérer un Datetime nul dans la base de données avec le code de structure d'entité en premier

mon modèle inclut une propriété datetime nullable .Im utilisant CodeFirst

 public DateTime? GoDate { get; set; }

Je voudrais insérer une valeur nulle dans ce champ mais EF insère la date habituelle 00/00/0001 au lieu de null, ce qui me donne également une erreur.

im utilisant Microsoft SQL Server 2012.

DateTime? date = null;
var entity = new Model()
                {
                    GoDate = date
                };

DataContext.Models.Add(entity);
DataContext.SaveChanges();

donne-moi l'erreur.

La conversion d'un type de données datetime2 en un type de données datetime a entraîné une valeur hors plage.\R\nL'instruction a été terminée.

C'est parce que le datetime du serveur sql ne peut pas avoir 00/00/0001, qu'EF génère automatiquement une fois qu'il insère un datetime nul dans la base de données.

Je veux insérer null dans la base de données.

19
Aflred

EF insère la date habituelle 00/00/0001 au lieu de null

Il n'y a rien habituel à ce sujet. Laissé à lui-même, EF 6.1 insère NULL.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var DataContext = new StackOverflowContext();

            DateTime? date = null;
            var entity = new Model()
            {
                GoDate = date
            };

            DataContext.Models.Add(entity);
            DataContext.SaveChanges();
        }
    }

    class Model
    {
        public int ModelId { get; set; }

        public DateTime? GoDate { get; set; }
    }

    class StackOverflowContext : DbContext
    {
        public DbSet<Model> Models { get; set; }
    }
}

enter image description here

Il est fort probable que vos mappages ou votre schéma de base de données soient incorrects.

14
ta.speot.is

Ou vous pouvez simplement définir comme ceci:

var entity= new Model
{
    GoDate = (DateTime?) null
}
DataContext.Models.Add(entity);
DataContext.SaveChanges();

Je pense que c'est un peu plus propre.

2
Sapan Ghafuri

Vous pouvez utiliser quelque chose comme ça dans votre modèle. puis l'envoi de null à partir de votre contrôleur fonctionnera bien.

 [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
        [Display(Name = "Date")]
        public DateTime? Date { get; set; }

Remarquez le "?" avant la date DateTime

1
user6243946

Vous pouvez utiliser ceci:

 Nullable<DateTime> date=null;
 var entity = new Model()
            {
                GoDate = date
            };

   DataContext.Models.Add(entity);
   DataContext.SaveChanges();
1
Senior Omarsoft Taiz