2017-03-18 5 views
1

Was wäre die einfachste und am wenigsten arbeitsintensive (von der Software POV) für mich in der Lage, eine Eigenschaft (zu lesen und zu ändern) von einer Entität über das Entity Framework generiert werden?Get Feld nach Name in Entity Framework

Beispiel (und vereinfachten Code) unter:

// <auto-generated> from Entity Framework 
public partial class tblCustomer 
{ 
    public int CustomerID { get; set; } 
    public string Status { get; set; } 
} 

Zum Beispiel würde Ich mag:

tblCustomer customer = new tblCustomer(); 
int pCustomerID = customer.GetFieldByName("CustomerID"); 
pCustomerID = 100; 

ich viele Antworten über Reflexion gelesen haben, sondern auch Kommentare, dass es schwer Verarbeitung ist (vielleicht ein bisschen übertrieben für meine Bedürfnisse).

Mein Beispielcode mag eher simpel erscheinen (so wäre eine Lösung dafür ziemlich sinnlos, der echte Code basiert auf großen Tabellen), aber wenn es irgendeine Art von GetFieldByName-Funktion gäbe, könnte ich meinen Code signifikant reduzieren eine Menge repetitiver Code, der dasselbe tut (nur zu verschiedenen Spalten).

Antwort

1

Wenn ich Ihr Problem richtig verstehe, denke ich, dass Sie den Changetracker dafür verwenden können (wenn die Entität bereits im Kontext ist).

dbContext.Entry(customer).CurrentValues["CustomerID"]

geben Sie den Wert CustomerID für das customer Objekt, sofern es an die dbContext Instanz gebunden ist.

Wenn es nicht Teil des Kontexts ist, können Sie Attach() verwenden, um es zuerst anzuhängen, oder verwenden Sie Add(), wenn es ein neuer Datensatz sein soll.

0

Wenn Sie nicht wie Spiegelung der einzige Weg, zu verwenden, die ich kenne, ist ein Wörterbuch in Ihrem Unternehmen mithilfe und auch Sie können alle diese Dinge in einer Basisklasse setzen und Ihre Entitäten erben es zum Beispiel wie folgt aus:

 [Serializable] 
public class BaseEntity 
{ 
    Dictionary<string, object> _dic; 

    public BaseEntity() 
    { 
     _dic = new Dictionary<string, object>(); 
    } 

    public object this[string propertyName] 
    { 
     get 
     { 
      return _dic[propertyName]; 
     } 
     set 
     { 
      _dic[propertyName] = value; 
     } 
    }  
} 

public class tblCustomer : BaseEntity 
{ 
    public int CustomerID 
    { 
     get 
     { 
      return (int)this["CustomerID"]; 
     } 
     set 
     { 
      this["CustomerID"] = value; 
     } 
    } 
    public string Status 
    { 
     get 
     { 
      return (string)this["Status"]; 
     } 
     set 
     { 
      this["Status"] = value; 
     } 
    } 
} 

tblCustomer Kunde = neu tblCustomer(); int pCustomerID = Kunde ["CustomerID"];

und über die Leistung Kosten von Reflection können Sie Ihre memberInfos zum ersten Mal in einem statischen Feld speichern und für alle Instanzen verwenden.

+0

Ja, ein Wörterbuch scheint der Weg zu sein, und ich hätte kein Problem damit, Reflection im Voraus zu verwenden, da es nur einmal gemacht wird. Da das Wörterbuch Kopien der Werte speichert, nehme ich an, dass ich Mutatoren für alle Eigenschaften haben muss (um die Einträge wie oben zu aktualisieren) und folglich die tt-Datei modifizieren muss, um die Klassen in Ihrem obigen Format zu erstellen. – ProgCoder