77 votes

Création du champ Date du code Entity Framework

J'utilise la méthode Entity Framework Code First pour créer ma table de base de données. Le code suivant crée une colonne DATETIME dans la base de données, mais je souhaite créer une colonne DATE .

 [DataType(DataType.Date)]
[DisplayFormatAttribute(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
public DateTime ReportDate { get; set; }
 

Comment créer une colonne de type DATE lors de la création d'une table?

Merci -SR

154voto

Ladislav Mrnka Points 218632

Essayez d'utiliser ColumnAttribute de System.ComponentModel.DataAnnotations (défini dans EntityFramework.dll):

 [Column(TypeName="Date")]
public DateTime ReportDate { get; set; }
 

9voto

Tyler Durden Points 602

J'ai trouvé cela fonctionne bien dans EF6:

 public class DateConvention : Convention
{
    public DateConvention()
    {
        this.Properties<DateTime>()
            .Where(x => x.GetCustomAttributes(false).OfType<DataTypeAttribute>().Any(a => a.DataType == DataType.Date))
            .Configure(c => c.HasColumnType("date"));
    }
}
 

Puis enregistrez ensuite convention dans votre contexte:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    modelBuilder.Conventions.Add(new DateConvention());
    // Additional configuration....
}
 

4voto

David Roth Points 308

En plus d'utiliser ColumnAttribute vous pouvez également créer une convention d'attribut personnalisé pour les DataTypeAttribute :

 public class DataTypePropertyAttributeConvention : AttributeConfigurationConvention<PropertyInfo, PrimitivePropertyConfiguration, DataTypeAttribute>
{
    public override void Apply(PropertyInfo memberInfo, PrimitivePropertyConfiguration configuration, DataTypeAttribute attribute)
    {
        if (attribute.DataType == DataType.Date)
        {
            configuration.ColumnType = "Date";
        }
    }
}
 

Enregistrez simplement la convention dans votre méthode OnModelCreating:

 protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
     base.OnModelCreating(modelBuilder);

     modelBuilder.Conventions.Add(new DataTypePropertyAttributeConvention());
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X