2010-10-19 15 views
18

Ich benutze das Entity Framework zum ersten Mal und möchte wissen, ob das Folgende möglich ist - ich habe meine Klassen aus der DB generiert und habe eine namens Category.Hinzufügen einer benutzerdefinierten Eigenschaft zu Entity Framework?

Offensichtlich hat es alle meine Felder in der Tabelle (ID, CategoryName, SortOrder usw.), aber ich möchte wissen, ob ich eine benutzerdefinierte Eigenschaft hinzufügen kann, die nicht in der Tabelle ist, aber das Ergebnis einer benutzerdefinierten ist Methode.

Ich möchte eine neue Eigenschaft namens 'CategoryURL' hinzufügen, die im Grunde die Eigenschaft 'CategoryName' ist, die durch eine benutzerdefinierte Methode ausgeführt wird und eine Bindestrich mit Bindestrich zurückgibt.

Mein erster Gedanke erbt von der generierten Category-Klasse und erstellt so etwas im Inneren?

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

Ist dies der richtige Ansatz? Und wird 'this.CategoryName' funktionieren, wie ich denke, sollte es? Grundsätzlich ist das Endergebnis, wenn ich eine Liste von 'Kategorie' zurückgebe, möchte ich, dass dies ein Teil der Klasse ist, damit ich es in meiner foreach-Schleife verwenden kann.

Hoffe das macht Sinn?

Antwort

19

sollten Sie eine partial Klasse verwenden:

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

Auf diese Weise this.CategoryName wie erwartet nur funktionieren wird.

Dies funktioniert, weil die vom Entity-Framework-Codegenerator generierten Klassen auch partial Klassen generieren. Es bedeutet auch, dass Sie die Klassen sicher aus der Datenbank generieren können, ohne die von Ihnen selbst definierten Teilklassen zu beeinflussen.

+0

Excellent dank – leen3o

+0

Das ist klug hinzuzufügen! In gewisser Weise ist es irgendwie unheimlich, weil es * zu * schlau aussieht. Haben wir irgendeinen Grund zu der Annahme, dass Microsoft dies in einer zukünftigen EF-Veröffentlichung durchbrechen könnte? Ich nehme an, ich sollte mir zu viele Sorgen machen, da diese Antwort fast vier Jahre alt ist und es nur für mich funktioniert hat! –

9

Sie sollten das [NotMapped] Attribut auf die Eigenschaft

Verwandte Themen