Création d'une propriété non mappée dans une entité (entity framework)

Je veux créer une propriété personnalisée sur l'une de mes entités mappées à partir de la base de données, mais cette propriété n'est pas mappée à la base de données, j'ai créé la propriété en utilisant des classes partielles mais en essayant de compiler, je reçois une erreur me disant que la propriété n'est pas mappée. Y a-t-il un attribut ou quelque chose que je devrais ajouter? Merci à l'avance.

31
demandé sur ryudice 2010-01-01 07:06:27

4 réponses

Utilisez des classes partielles pour ajouter les propriétés ou les méthodes que vous souhaitez ajouter. Par exemple

namespace WhateverNamespaceYourEntityModelIsIn
{
    public partial class  TheNameOfYourEntity
    {
          public string MyNewProperty { get; set; }
    }
}

Et cela devrait vous faire.

8
répondu Orion Adrian 2014-05-30 13:37:17

Vous pouvez également marquer votre propriété avec l'attribut [NotMapped] ou utiliser la méthode Ignore de l'API fluent.

La Propriété

public class EntityName
{
    [NotMapped]
    private string PropertyName { get; }
}

API fluide

 public class Entities : DbContext
 {
    public DbSet<EntityType> Users { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
       // Some database configuration
       modelBuilder.Entity<EntityType>()
             .Ignore(i => i.PropertyName);
     }
 }
83
répondu Kniganapolke 2017-06-16 15:10:34

Je suis sérieusement en retard à la conversation, mais vous voulez aussi marquer le partiel comme sérialisable et la propriété comme sérialisable - si vous prévoyez de JSON ou de sérialiser les objets:

[Serializable()] 
public partial class MyClass {
    private System.Nullable<int> _Age;
    [global::System.Runtime.Serialization.DataMemberAttribute(Order = 4)] 
    public System.Nullable<int> Age {
            ...
    }
}

Les directives [Serializable()] et [global:] sont nécessaires. Si vous excluez le [global:], chaque fois que vous le sérialisez, il sera ignoré et non inclus dans la sérialisation.

1
répondu Jason 2014-04-07 15:51:07

Cette page m'a vraiment aidé. J'ajouterai exactement ce que j'ai ajouté à ma configuration de mappage après avoir vu la réponse de Kniganapolke.

 public TheObjectName()
   {
       this.HasKey(t => t.ID);
       this.Ignore(t => t.IsProcess); //we don't want EF to worry about this
    }

Merci à tous, merci donc!

1
répondu BroTrevor 2015-08-06 15:54:55