2010-09-01 3 views
6

Ich verwende Entity Framework mit einem Web Service und ich habe Entity Teil Klassenobjekte, die automatisch vom Web Service generiert wurden.Wie erstellt man eine Gruppe von Methoden/Eigenschaften innerhalb einer Klasse?

Ich möchte diese Klassen erweitern, aber ich möchte sie in der generierten Klasse in einer Weise gruppieren, ähnlich wie ein Namespace (außer in einer Klasse).

Hier ist meine generierte Klasse:

public partial class Employee : Entity 
{ 
    public int ID { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

Und ich möchte einige neue Eigenschaften, Funktionen, usw. ähnlich ist hinzuzufügen:

public partial class Employee : Entity 
{ 
    public string FullName { 
     get { return this.FirstName + " " + this.LastName; } 
    } 
} 

Allerdings würde ich zusammen alle zusätzlichen Eigenschaften mögen Gruppe daher habe ich eine etwas sichtbarere Trennung von den generierten Methoden. Ich möchte in der Lage sein, etwas zu nennen wie:

myEmployee.CustomMethods.FullName 

Ich rief CustomMethods eine andere Klasse in der Teilklasse schaffen könnte und einen Verweis auf die Basisklasse übergeben, damit ich die generierten Objekte zugreifen kann. Oder nenne sie nur einen bestimmten Weg. Aber ich bin mir nicht sicher, was die beste Lösung ist. Ich suche nach Gemeinschaftsideen, die sauber sind und unter gute Praxis fallen. Vielen Dank.

+0

Btw, warum wollen Sie gruppieren diese benutzerdefinierten Eigenschaften? Manchmal können Sie Attribute verwenden, um sie zu markieren. –

Antwort

16

Hier wird mit einer anderen Lösung explizite Schnittstellen:

public interface ICustomMethods { 
    string FullName {get;} 
} 

public partial class Employee: Entity, ICustomMethods { 
    public ICustomMethods CustomMethods { 
     get {return (ICustomMethods)this;} 
    } 
    //explicitly implemented 
    string ICustomMethods.FullName { 
     get { return this.FirstName + " " + this.LastName; } 
    } 
} 

Verbrauch:

string fullName; 
fullName = employee.FullName; //Compiler error  
fullName = employee.CustomMethods.FullName; //OK 
+2

+1 mit expliziten Schnittstellen macht Code besser lesbar mit guter Erweiterbarkeit. –

+0

+1 für die expliziten Schnittstellen –

+0

ist es möglich, diese Schnittstelle explizit zu erzwingen? – hunter

2
public class CustomMethods 
{ 
    Employee _employee; 
    public CustomMethods(Employee employee) 
    { 
     _employee = employee; 
    } 

    public string FullName 
    { 
     get 
     { 
      return string.Format("{0} {1}", 
       _employee.FirstName, _employee.LastName); 
     } 
    } 
} 

public partial class Employee : Entity 
{ 
    CustomMethods _customMethods; 
    public CustomMethods CustomMethods 
    { 
     get 
     { 
      if (_customMethods == null) 
       _customMethods = new CustomMethods(this); 
      return _customMethods; 
     } 
    } 
} 

normalerweise würde ich Eigenschaften wie FullName direkt am Teil Klasse setzen, aber ich kann sehen, warum Sie Trennung wollen könnten.

+0

Ich denke, das hast du gegen Ende deiner Frage gesagt. Ich denke, diese Antwort ist nicht schrecklich und bekommt die Trennung, die du suchst. – hunter

Verwandte Themen