Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EF 6 IsRequired() allowing empty strings

In past projects with versions of EF5 and EF4, the IsRequired() fluent API method would thrown a DbEntityValidationException if the property was null or an empty string. In my current project utilizng EF6, The DBEntityValidationException is not thrown when the string property is empty.

Entity:

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

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

Configuration:

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

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

After pouring over the MSDN EF documentation and stack overflow, I am at a loss for why this is happening. Did a convention get added/modified to EF6?

like image 284
awolske Avatar asked Dec 16 '13 19:12

awolske


3 Answers

These days you can still use [Required] attribute and have configurable AllowEmptyStrings

[Required(AllowEmptyStrings = false)]

False is default

like image 141
Kind Contributor Avatar answered Sep 30 '22 06:09

Kind Contributor


You may be confusing the StringColumnConfiguration.IsRequired Method and RequiredAttribute.

.IsRequired() marks that column in the database is NOT NULL. The [Required] annotation however, will raised a validation exception if the property is null, contains an empty string (""), or contains only white-space characters.

like image 33
ckal Avatar answered Sep 30 '22 07:09

ckal


EF Core 2.1 here - looks like marking a property as required using [Required] and saving it to the DB with empty string value, let's it go through... very strange.

Documentation states the following:

//
// Summary:
//     Gets or sets a value that indicates whether an empty string is allowed.
//
// Returns:
//     true if an empty string is allowed; otherwise, false. The default value is false.
public bool AllowEmptyStrings { get; set; }
like image 26
Ross Avatar answered Sep 30 '22 07:09

Ross