2013-12-16 12 views
5

W poprzednich projektach z wersjami EF5 i EF4, metoda API IsRequired() płynnie rzuciłaby wyjątek DbEntityValidationException, gdyby właściwość była pusta lub pusty. W moim bieżącym projekcie wykorzystującym EF6 wyjątek DBEntityValidationException nie jest generowany, gdy właściwość string jest pusta.EF 6 IsRequired() zezwalając na puste ciągi znaków

Podmiot:

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

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

Konfiguracja:

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

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

Po wylaniu na dokumentacji MSDN EF i przepełnienia stosu, jestem w rozterce, dlaczego tak się dzieje. Czy konwencja została dodana/zmodyfikowana do wersji EF6?

+0

Czy zarejestrowałeś 'EntityTypeConfiguration' wewnątrz wewnątrz' metody OnModelCreated'? Tak więc z 'modelBuilder.Configurations.Add (new ApplicationMapping());' – nemesv

+0

Tak, sprawdziłem, że konfiguracja typu jednostki jest tworzona, gdy model jest tworzony. IsRequired() rzuca wyjątek DBEntityValidationException, gdy właściwość Name ma wartość null, ale nie wtedy, gdy Name = string.Empty – awolske

Odpowiedz

11

Użytkownik może pomylić wartości StringColumnConfiguration.IsRequired Method i RequiredAttribute.

.IsRequired() oznacza, że ​​kolumna w bazie danych to NOT NULL. Adnotacja [Required] spowoduje jednak zgłoszenie wyjątku sprawdzania poprawności, jeśli właściwość ma wartość NULL, zawiera pusty ciąg znaków ("") lub zawiera tylko znaki spacji.

+0

to wygląda na dobrą sugestię, Fluent api po prostu nie jest zerowy, ponieważ jest wymagany. być może była jeszcze inna próba, którą sprawdziłeś przed wyświetleniem pustych strun. –

+0

Właśnie zweryfikuję, że atrybut [Wymagany] dla właściwości wywoła wyjątek sprawdzania poprawności, gdy obiekt zawierający ma być przechowywany z tą ustawioną wartością null lub "". To jest z EF6. – Oliver

+0

ale konflikt polega na tym, że ustawiłeś "nie puste" w DB i autogenerate poco classes w VS2015, właściwość jest oznaczona jako [Wymagane], wtedy myślisz, że możesz wstawić String.Empty, ale ulega awarii. Czy to błąd w generowaniu EF poco? – batmaci

9

Te dni można nadal korzystać z atrybutu [Required] i mają konfigurowalne AllowEmptyStrings

[Required(AllowEmptyStrings = false)] 

Fałsz jest domyślnym

Powiązane problemy