2010-10-19 7 views
18

J'utilise Entity Framework pour la première fois et je veux savoir si ce qui suit est possible - J'ai généré mes classes à partir de la base de données, et j'en ai une appelée Catégorie.Ajout d'une propriété personnalisée à Entity Framework?

Évidemment, il a tous mes champs dans la table (ID, CategoryName, SortOrder etc ..) mais je veux savoir si je peux ajouter une propriété personnalisée qui n'est pas dans la table, mais est en fait le résultat d'une coutume méthode.

Je veux ajouter une nouvelle propriété appelée 'CategoryURL' qui est fondamentalement la propriété 'CategoryName' exécutée par une méthode personnalisée et retourne une chaîne de trait d'union.

Ma pensée initiale hérite de la classe Category générée et crée quelque chose comme ça à l'intérieur?

public string CategoryURL 
{ 
    get{ return MyCustomMethod(this.CategoryName) } 
} 

Est-ce la bonne approche? Et 'this.CategoryName' fonctionnera-t-il comme je le pense? Fondamentalement, le résultat final est quand je retourne une liste de 'Catégorie' je veux que cela fasse partie de la classe afin que je puisse l'utiliser dans ma boucle foreach.

Espérons que cela a du sens?

Répondre

19

vous devez utiliser une partial classe:

public partial class Category 
{ 
    public string CategoryURL 
    { 
     get{ return MyCustomMethod(this.CategoryName); } 
    } 
} 

De cette façon this.CategoryName fonctionnera tout comme prévu.

Cela fonctionne car les classes générées par le générateur de code de structure d'entité génèrent également des classes partial. Cela signifie également que vous pouvez générer en toute sécurité les classes à partir de la base de données sans affecter les classes partielles que vous avez définies vous-même.

+0

excellents grâce – leen3o

+0

C'est intelligent! D'une certaine manière, c'est un peu effrayant parce que ça semble * trop * intelligent. Avons-nous des raisons de croire que Microsoft pourrait casser cela dans une future version d'EF? Je suppose que je devrais m'inquiéter trop car cette réponse a presque quatre ans et ça a marché pour moi! –

9

Vous devez ajouter l'attribut [NotMapped] à la propriété

Questions connexes