2013-12-16 5 views
5

EF5およびEF4のバージョンを持つ過去のプロジェクトでは、IsRequired()流暢APIメソッドは、プロパティがnullまたは空文字列の場合はDbEntityValidationExceptionをスローします。現在のプロジェクトでEF6を使用している場合、文字列プロパティが空の場合、DBEntityValidationExceptionはスローされません。EF 6空文字列を許可するIsRequired()

エンティティ:

public class Application : BaseEntity 
{ 
    public string Name { get; set; } 

    // navigation properties 
    public IList<Role> Roles { get; set; } 
} 

構成:

internal class ApplicationMapping : EntityTypeConfiguration<Application> 
{ 
    public ApplicationMapping() 
    { 
     // table name 
     this.ToTable("Applications"); 

     // properties 
     this.Property(t => t.Name) 
      .IsRequired() 
      .HasMaxLength(100); 
    } 
} 

MSDN EFのドキュメントとスタックオーバーフローの上に注いだ後、私はなぜこれが起こっているために途方に暮れています。大会はEF6に追加/変更されましたか?

+0

あなたは 'OnModelCreated'メソッドの内部の内側にあなたの' EntityTypeConfiguration'を登録しているのですか?したがって、 'modelBuilder.Configurations.Add(new ApplicationMapping()); ' – nemesv

+0

はい、モデルの作成時にエンティティタイプの設定がインスタンス化されていることを確認しました。 Nameプロパティがnullの場合、IsRequired()はDBEntityValidationExceptionをスローしますが、Name = string.Emptyの場合はDBEntityValidationExceptionがスローされます。 – awolske

答えて

11

StringColumnConfiguration.IsRequired MethodRequiredAttributeを混同している可能性があります。

このデータベースの列はNOT NULLです。しかし、[Required]アノテーションは、プロパティがnull、空の文字列( "")、または空白文字のみを含む場合、検証例外を送出します。

+0

これは良い提案です。流暢なAPIはnullではありません。おそらく空の文字列を調べる前にあなたが持っていた他の小切手がありました。 –

+0

私は、包含エンティティがそのプロパティをnullまたは ""に設定して保存しようとしたときに、プロパティの[必須]属性が検証例外をトリガーすることを確認しました。これはEF6の場合です。 – Oliver

+0

しかし、ここでの矛盾は、DBで "not null"を設定し、VS2015でpocoクラスを自動生成し、プロパティが[必須]としてマークされていると、あなたはString.Emptyを挿入できると思いますが、クラッシュします。それはEF poco生成のバグですか? – batmaci

9

これらの日、あなたはまだ[Required]属性を使用して、構成AllowEmptyStrings

[Required(AllowEmptyStrings = false)] 

Falseを持つことができますが、デフォルト

関連する問題