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?
You may be confusing the StringColumnConfiguration.IsRequired Method and RequiredAttribute.
.IsRequired()
marks that column in the database isNOT 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.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:
These days you can still use
[Required]
attribute and have configurableAllowEmptyStrings
False is default