2016-11-01 27 views
0

私が持っているデフォルト値を持つ列にNULL値を挿入することはできません、私はプロパティの登録のためのデフォルト値を設定しますが、EFコアは

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

OnModelCreatingメソッドを持つエンティティ

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

とコンテキスト私が行うとき挿入すると、例外が発生します:値nullを列登録に挿入できません。

+0

からこれを削除するには、なぜあなたはアイデンティティとしてのDateTimeを持っているのですか?そこにはいけないのですが、なぜあなたは指導者と指導者の両方を抱えていますか? – Dispersia

+0

nullableでない 'DateTime'プロパティに対して' null'値を設定するにはどうすればいいですか?おそらく、それは '[DatabaseGenerated(DatabasegeneratedOption.Identity)]属性です。私は、 'Identity'は' DateTime'値には定義されず、 'int'だけに定義されていると思います。 – krillgar

+0

多分 私は –

答えて

1

まず、Restration[DatabaseGenerated(DatabaseGeneratedOption.Identity)]を削除してください。あなたの例外の原因になる可能性があります。あなたはそれがNULL可能にしたいとあなたもあなたのエンティティと値を可能性が設定したくない場合は、次の

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

作業をする必要があります(私はここにVS 2015を持っていないので、あなたはそれ以外の場合はテストする必要があります。 。)

更新コンストラクタでRestrationの値を設定: を少なくともこの行を削除

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

これは正解です。 –

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()"); 
    
+0

それは動作します!しかし、私はそれが疑わしい決定だと思う。結局のところ、それはEFで動作するはずです。 –

+0

@Matthias Burgerごめんなさい。私はあなたの答えを見ていない –