Dmitriy Gavrilenko
Dmitriy Gavrilenko

Reputation: 310

EF Core cannot insert the value null into column with default value

I have entity

public class Realtor
{
    [Key]
    public int Id { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public Guid Guid { get; set; }

    public string FirstName { get; set; }
    public string LastName { get; set; }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public DateTime Registration { get; set; }

    [ForeignKey("Id")]
    public int SubdivId { get; set; }
    public Subdiv Subdiv { get; set; }
}

and context with OnModelCreating method

modelBuilder.Entity<Realtor>(real => {
            real.Property<Guid>(p => p.Guid)
            .HasDefaultValueSql("newsequentialid()");

            real.Property<DateTime>(p => p.Registration)
            .HasDefaultValueSql("getdate()");

            real.HasOne(r => r.Subdiv)
            .WithMany(s => s.Realtors)
            .HasForeignKey(r => r.SubdivId);
        });

I set default value for property Registration, but when I do an insert, I get Exception: cannot insert the value null into column Registration.

Upvotes: 1

Views: 4829

Answers (2)

Angel Pincay
Angel Pincay

Reputation: 21

  1. Remove

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    
  2. Add a constructor in your Realtor class.

    public Realtor()
    {
      this.Guid = Guid.NewGuid();
      this.Restration = DateTime.Now;
    }
    
  3. And remove this from OnModelCreating

    real.Property<Guid>(p => p.Guid).HasDefaultValueSql("newsequentialid()");
    real.Property<DateTime>(p => p.Restration).HasDefaultValueSql("getdate()");
    

Upvotes: 2

Matthias Burger
Matthias Burger

Reputation: 5946

First of all, remove the [DatabaseGenerated(DatabaseGeneratedOption.Identity)] for Restration. This could be the cause for your exception. If you don't want to make it nullable and want to set the value with your entity you could also:

public DateTime Restration { get; set; } = DateTime.Now;

Should work (I ain't got a VS 2015 here, so you have to test. Otherwise set the value for Restration in constructor.)

update: and remove at least this line

real.Property<DateTime>(p => p.Registration)
        .HasDefaultValueSql("getdate()");

Upvotes: 4

Related Questions