2011-05-10 1 views
10

J'ai un ensemble de classes en tant qu'objets de mon domaine. J'ai un ensemble de fichiers de configuration pour mapper ces objets (EntityTypeConfiguration <>).Avec Entity Framework 4.1 Codefirst, comment créer des champs non mappés dans les classes poco?

Lorsque j'ajoute une propriété à l'un des objets de domaine sans mappage à une colonne, le dbcontext tente d'interroger la colonne, en ignorant le fait qu'il n'est pas mappé.

Je dois manquer un paramètre dans le code de configuration ou le code dbcontext. Je ne veux pas ajouter d'attribut à la classe poco (la décoration des pocos les lie à une implémentation de persistance spécifique, que je souhaite éviter).

Sur l'appel contre le IQueryable pour remplir un objet de billets, l'appel échoue avec le message:

nom de colonne non valide « NotInDatabase ».

public class Ticket 
{ 
    public Ticket() 
    { 
    } 

    public virtual int Id 
    { 
     get; 
     set; 
    } 

    public virtual string Title 
    { 
     get; 
     set; 
    } 

    public virtual string Description 
    { 
     get; 
     set; 
    } 

    public string NotInDatabase 
    { 
     get; 
     set; 
    } 
} 


internal class TicketConfiguration : EntityTypeConfiguration<Ticket> 
{ 
    public TicketConfiguration() 
    { 
     ToTable("ticket_table_name"); 

     HasKey(o => o.Id) 
      .Property(o => o.Id) 
      .HasColumnName("ticketId") 
      .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity) 
      .IsRequired(); 

     Property(o => o.Title).HasColumnName("TicketTitle"); 
     Property(o => o.Description).HasColumnName("TicketDescription"); 
    } 
} 

Note: S'il vous plaît ne suggèrent pas l'utilisation « première base de données » ou « Modèle d'abord » pour ma situation. Je veux mapper des objets poco à la base de données en utilisant les fonctions du code en premier, même si j'ai une structure db existante. Je compare cela à nhibernate et je veux vraiment coller à une structure similaire (depuis que Microsoft a "adopté" l'approche de nhibernate, il est assez facile de comparer des pommes à des pommes).

Merci!

+4

[Ignore] devrait faire l'affaire - modifier - ma faute, on l'appelle [NotMapped]. Faire une recherche rapide sur le net pour le cadre d'entité ignorer l'attribut de la colonne – jeriley

+0

@jeriley: C'est la réponse, donc vous devriez le poster comme une réponse;) –

+1

Btw. les deux versions sont correctes - 'NotMapped' est l'attribut et' Ignore' est la méthode api courante pour faire la même chose. –

Répondre

15

.Ignore devrait faire l'affaire ou par attribut ce que l'on appelle [NotMapped]

Questions connexes