Entity Framework 6: ¿Uso correcto de la característica "Personalizar convenciones de código primero"?

entity-framework entity-framework-6

Pregunta

Mi requerimiento es configurar la asignación de longitud de cadena globalmente, pero también puedo usar MaxLengthAttribute para configurar una propiedad especialmente. Aquí está mi código:

public class StringLengthConvention
: IConfigurationConvention<PropertyInfo, StringPropertyConfiguration>
{
    public void Apply(
        PropertyInfo propertyInfo,
        Func<StringPropertyConfiguration> configuration)
    {
        StringAttribute[] stringAttributes = (StringAttribute[])propertyInfo.GetCustomAttributes(typeof(StringAttribute),true);
        if (stringAttributes.Length > 0)
        {
            configuration().MaxLength = stringAttributes [0].MaxLength;
        }
    }
}

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {           
        modelBuilder.Conventions.Add<StringLengthConvention>();
    }

public class ContentInfo
{
   // ...
    [MaxLength(200)]
    [String]        
    public string TitleIntact { get; set; }
   // ...
}

Mi problema es que "MaxLength" ya no puede funcionar. ¿Debo verificar si la propiedad tiene un MaxLengthAttribute antes de aplicar la configuración global en StringLengthConvention.Apply ()?

Respuesta aceptada

Lo que funcionaría en esta situación es crear una convención ligera que especifique la propiedad MaxLength para cadenas. En esta situación, la convención establecería la longitud máxima de la propiedad para todas las cadenas, excepto cuando ya estaba configurada por una anotación, con la API fluida o por otra convención.

En su método OnModelCreate agregue el siguiente código para establecer su MaxLength predeterminado:

modelBuilder.Properties<string>()
            .Configure(c => c.HasMaxLength(DefaultStringLength));

Aquí encontrará una lista de convenciones: http://msdn.microsoft.com/en-us/data/jj819164.aspx, asegúrese de consultar los "Ejemplos adicionales" al final de la página.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué