2013-12-16 27 views
5

EF5 ve EF4 sürümleri olan geçmiş projelerde, IsRequired() akıcı API yöntemi, özellik boş veya boş bir dize ise bir DbEntityValidationException atılır. Şu anki proje kullanımında EF6, dize özelliği boş olduğunda DBEntityValidationException atılmıyor.EF 6 IsRequired() boş dizelere izin verme

Varlık:

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

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

Yapılandırma:

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

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

MSDN EF dokümantasyon ve yığın taşması üzerine döküldükten sonra, ben bu neden oluyor için bir kayıp am. Bir toplantı EF6'ya eklendi/değiştirildi mi?

+0

Eğer 'OnModelCreated' yönteminin içine içerdeki' EntityTypeConfiguration' kayıtlı mı nedir? Yani modelBuilder.Configurations.Add (yeni ApplicationMapping()); – nemesv

+0

Evet, model oluşturulduğunda varlık türü yapılandırmasının başlatıldığını doğruladım. Name özelliği null olduğunda IsRequired() DBEntityValidationException atıyor, ancak Ad = string.Empty – awolske

cevap

11

StringColumnConfiguration.IsRequired Method ve RequiredAttribute'u karıştırıyor olabilirsiniz. Veritabanındaki sütunun NOT NULL olduğunu belirten

. Ancak, [Required] ek açıklaması, özellik boşsa, boş bir dize ("") içeriyorsa veya yalnızca beyaz boşluk karakterleri içeriyorsa bir doğrulama özel durumu oluşturur.

+0

bu iyi bir öneri görünüyor değilken, akıcı API requiried edilir null sadece değildir. Belki de boş dizeleri taramadan önce sahip olduğunuz başka bir kontrol vardı. –

+0

Bir mülkün [Required] özniteliğinin, bu varlık null veya "" olarak ayarlanmış özellik ile depolanmış varlık depolanmaya çalışıldığında bir doğrulama istisnasını tetikleyeceğini doğruladım. Bu EF6 ile. – Oliver

+0

ama burada çatışması DB "boş değil" kurmak ve VS2015 içinde poco sınıfları autogenerate yani Mülkiyet [Gerekli] olarak işaretlenmiş, o zaman String.Empty ekleyebilirsiniz düşünüyorum ama çöker. EF poco üretiminde bir böcek mi? – batmaci

9

Bu gün hala [Required] özellik kullanmak ve yapılandırılabilir AllowEmptyStrings

[Required(AllowEmptyStrings = false)] 

Yanlış olabilir varsayılan

İlgili konular