2013-07-15 5 views
1

Utilisation du code Entity Framework D'abord, j'ai créé des objets pour stocker des données dans ma base de données. J'implémente la classe ReactiveObject de la bibliothèque ReactiveUI dans ces objets, donc je reçois des notifications chaque fois qu'un prorerty change pour une interface utilisateur plus réactive. Mais l'implémentation ajoute 3 propriétés, à savoir Changed, Changing et ThrowExceptions à mes objets. Je ne pense pas vraiment que ce soit un problème, mais lors du chargement des tables dans un DataGrid, ceux-ci obtiennent tous une colonne aussi.Ne pas mapper les propriétés ReactiveUI dans Entity Framework

Existe-t-il un moyen de masquer ces propriétés? Je ne peux pas définir manuellement les colonnes parce que j'ai 1 DataGrid pour tous mes tableaux, que je choisis d'un combobox ..

Solution trouvée ci-dessous et aussi ici: Is there a way to hide a specific column in a DataGrid when AutoGenerateColumns=True?

void dataTable_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) 
    { 
     List<string> removeColumns = new List<string>() 
     { 
      "Changing", 
      "Changed", 
      "ThrownExceptions" 
     }; 

     if (removeColumns.Contains(e.Column.Header.ToString())) 
     { 
      e.Cancel = true; 
     } 
    } 

Répondre

5

Il y a quelques façons de faites cela avec Code First. La première option est de annote la propriété avec le NotMappedAttribute:

[NotMapped] 
public bool Changed { get; set; } 

Maintenant, ceci est pour votre information. Comme vous héritez d'une classe de base et que vous n'avez pas accès aux propriétés de cette classe, vous ne pouvez pas l'utiliser. La seconde option consiste à utiliser Fluent Configuration avec la méthode Ignore:

modelBuilder.Entity<YourEntity>().Ignore(e => e.Changed); 
modelBuilder.Entity<YourEntity>().Ignore(e => e.Changing); 
modelBuilder.Entity<YourEntity>().Ignore(e => e.ThrowExceptions); 

Pour accéder au DbModelBuilder, remplacer la méthode OnModelCreating dans votre DbContext:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    // .. Your model configuration here 
} 

Une autre option consiste à créer une classe héritant EntityTypeConfiguration<T>:

public abstract class ReactiveObjectConfiguration<TEntity> : EntityTypeConfiguration<TEntity> 
    where TEntity : ReactiveObject 
{ 

    protected ReactiveObjectConfiguration() 
    { 
     Ignore(e => e.Changed); 
     Ignore(e => e.Changing); 
     Ignore(e => e.ThrowExceptions); 
    } 
} 

public class YourEntityConfiguration : ReactiveObjectConfiguration<YourEntity> 
{ 
    public YourEntityConfiguration() 
    { 
     // Your extra configurations 
    } 
} 

Les avantages de cette méthode est que vous définissez une configuration de base pour tous vos ReactiveObject et supprimez toutes les redondances de définitions.

Plus d'informations sur Fluent Configuration dans les liens ci-dessus.

+0

J'ai essayé d'ajouter les ignorés dans le OnModelCreating, mais les colonnes sont toujours affichées dans ma grille de données. Je pense que c'est parce que le DataGrid ne sait pas que ces propriétés sont ignorées dans le framework d'entité – Kryptoxx

+0

Après quelques recherches, j'ai trouvé cette question qui a résolu mes problèmes restants: http://stackoverflow.com/questions/4000132/is-there-a -way-to-hide-a-specific-column-dans-a-dataagrid-when-autogeneratecolumns Merci pour la réponse rapide! – Kryptoxx

+0

@TomVandenbussche Heureux que vous pourriez trouver une réponse connexe! J'étais sur le point d'écrire sur la configuration de DataGrid. ;) –

Questions connexes