2015-03-19 3 views
2

У меня есть следующий BaseEntityFluent конфигурации для базового объекта в Entity Framework

public class BaseEntity 
{ 
    public BaseEntity() 
    { 
     DateCreated = DateTime.UtcNow; 
     DateModified = DateTime.UtcNow; 
    } 

    public DateTime DateCreated { get; set; } 
    public DateTime DateModified { get; set; } 

    [MaxLength(36)] 
    public string CreateUserId { get; set; } 

    [MaxLength(36)] 
    public string ModifyUserId { get; set; } 
} 

Всех мои другие объекты выводят из него. Теперь я бы хотел использовать свободную конфигурацию вместо DataAnnotations. Должен ли я действительно настраивать MaxLength двух свойств строки в каждой конфигурации DbModelBuilder?

ответ

4

Должен ли я настроить MaxLength для двух строк свойств в каждой конфигурации DbModelBuilder?

№ Вы можете настроить проверки базового типа, и EF применит их к производным типам. Например:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<BaseEntity>().Property(x => x.CreateUserId).HasMaxLength(36); 
    modelBuilder.Entity<BaseEntity>().Property(x => x.ModifyUserId).HasMaxLength(36); 

    base.OnModelCreating(modelBuilder); 
} 

Update (в соответствии с вашим комментарием):

Вы можете использовать (а новый) метод Properties() определить отображение и валидации, основываясь на именах свойств, а не по типам объектов.

Например:

modelBuilder.Properties().Where(x => x.Name == "CreateUserId").Configure(x => x.HasMaxLength(36)); 
modelBuilder.Properties().Where(x => x.Name == "ModifyUserId").Configure(x => x.HasMaxLength(36)); 

См MSDN

+0

Да, но я хочу, чтобы избавиться от DataAnnotation – Sandro

+0

я пересмотрел свой ответ. – haim770

+0

Теперь я получаю исключение, что 'BaseEntity' не имеет ключа. – Sandro

Смежные вопросы