EF 4.1 Code First: "non-null value of type 'DateTime'" Issue

Paul Brown picture Paul Brown · Mar 29, 2011 · Viewed 31k times · Source

After initial dev and testing I have now pointed my MVC3 application at an existing database which contains live data.

However I am getting this error related to the field called Date1 of type "datetime".

The 'Date1' property on 'StaffAttachment' could not be set to a 'null' value. You must set this property to a non-null value of type 'DateTime'. 

Is this telling me that all rows in the date must have a date and not be null? What do I do if I dont want to set a date on specific row?

Can anyone offer advice on resolving this issue?

Thanks Paul

EDIT 1 (Posting Model)

public class StaffAttachment
{
    [Key]
    public int AttachmentID { get; set; }

    public int? StaffID { get; set; }

    public int? TypeID { get; set; }

    [Required]
    [DisplayName("Proof of ID")]
    public int? AttachmentTypeID { get; set; }

    [Required]
    [DisplayName("ID Reference")]
    public string Reference1 { get; set; }

    public string Reference2 { get; set; }

    public string DateType { get; set; }

    [DisplayName("Expiry Date")]
    public DateTime Date1 { get; set; }

    [Required]
    public DateTime Date2 { get; set; }

    public DateTime Date3 { get; set; }

    public DateTime Date4 { get; set; }

    public string AttachmentPath { get; set; }

    public int? ValidatedUserID { get; set; }

    public DateTime ValidatedDate { get; set; }

    public int? CreatedUserID { get; set; }

    public DateTime CreatedDate { get; set; }

    public int? EditedUserID { get; set; }

    public DateTime EditedDate { get; set; }

    public TimeSpan TimeStamp { get; set; }

    public string FileName { get; set; }

    public byte[] FileImage { get; set; }

    public int AttachmentSection { get; set; }
}

Answer

BrokenGlass picture BrokenGlass · Mar 29, 2011

Is this telling me that all rows in the date must have a date and not be null? What do I do if I dont want to set a date on specific row?

It looks like the DB you point at have null values for Date1. If you do indeed not want to set a date for all rows, just make your Date1 property nullable:

public DateTime? Date1{get;set;}

Alternatively you can just put in a default date for all the rows that do not have a datetime set currently via SQL.