EF Core无法使用默认值将值null插入到列中

时间:2016-11-01 16:14:56

标签: c# .net entity-framework

我有实体

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; }
}

和OnModelCreating方法的上下文

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);
        });

我为属性Registration设置了默认值,但是当我执行插入时,我得到了Exception:无法将值null插入到Column Registration列中。

2 个答案:

答案 0 :(得分:3)

首先,删除[DatabaseGenerated(DatabaseGeneratedOption.Identity)]的{​​{1}}。这可能是您例外的原因。如果您不想让它可以为空并且想要使用您的实体设置值,您还可以:

Restration

应该工作(我这里没有VS 2015,所以你必须测试。否则在构造函数中设置public DateTime Restration { get; set; } = DateTime.Now; 的值。)

<强>更新 并删除至少这一行

Restration

答案 1 :(得分:1)

  1. 删除

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    
  2. 在Realtor类中添加构造函数。

    public Realtor()
    {
      this.Guid = Guid.NewGuid();
      this.Restration = DateTime.Now;
    }
    
  3. 并从OnModelCreating

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