2017-09-29 5 views
1

Objekt in einer Sammlung von abstrakten Objekten zu aktualisieren Wie ich bin ein asp net Kern + ef Kern 2.0 mit lokalisierten Objekten in meinem Modell developping, angepasst ich die Lösung in dem folgenden Link zur Verfügung gestellt link meine Objekte zu lokalisieren.saubere Art und Weise für

Ich versuche jetzt eine saubere Art und Weise zu finden, meine Sammlung von Übersetzung zu aktualisieren, wenn aktualisierte Objekt in der Steuerung empfangen werden.

Für den Moment, als ich einen Schritt Modellklasse auf diese Weise definiert haben:

public class Step 
    { 
     //Native properties 
     public Guid ID { get; set; } 
     public string Name { get; set; } 
     public int Order { get; set; } 
     public string ScriptBlock { get; set; } 

     //Parent Step Navigation property 
     public Nullable<Guid> ParentStepID { get; set; } 
     public virtual Step ParentStep { get; set; } 

     //Collection of sub steps 
     public virtual ICollection<Step> SubSteps { get; set; } 

     //MUI Properties 
     public TranslationCollection<StepTranslation> Translations { get; set; } 

     public string Description { get; set; } 
     //{ 
     // get { return Translations[CultureInfo.CurrentCulture].Description; } 
     // set { Translations[CultureInfo.CurrentCulture].Description = value; } 
     //} 

     public Step() 
     { 
      //ID = Guid.NewGuid(); 
      Translations = new TranslationCollection<StepTranslation>(); 
     } 
    } 

    public class StepTranslation : Translation<StepTranslation> 
    { 

     public Guid StepTranslationId { get; set; } 

     public string Description { get; set; } 

     public StepTranslation() 
     { 
      StepTranslationId = Guid.NewGuid(); 
     } 

    } 

Übersetzung und translationCollection sind die gleichen wie in dem Link

public class TranslationCollection<T> : Collection<T> where T : Translation<T>, new() 
{ 

    public T this[CultureInfo culture] 
    { 
     // indexer 
    } 

    public T this[string culture] 
    { 
     //indexer 
    } 

    public bool HasCulture(string culture) 
    { 
     return this.Any(x => x.CultureName == culture); 
    } 

    public bool HasCulture(CultureInfo culture) 
    { 
     return this.Any(x => x.CultureName == culture.Name); 
    } 
} 

public abstract class Translation<T> where T : Translation<T>, new() 
{ 

    public Guid Id { get; set; } 

    public string CultureName { get; set; } 

    protected Translation() 
    { 
     Id = Guid.NewGuid(); 
    } 

    public bool HasProperty(string name) 
    { 
     return this.GetType() 
      .GetProperties(BindingFlags.Public | BindingFlags.Instance) 
      .Any(p => p.Name == name); 
    } 

} 

in dieser Probe Meine Frage ist, wie zu tun korrekt mit der PUT-Methode und der Description-Eigenschaft meines Schrittreglers. Wenn ein zu aktualisierendes Step-Objekt empfangen wird (was über einen nativen C# -Client erfolgt), wurde möglicherweise nur die Eigenschaft String Beschreibung von Step erstellt/aktualisiert/unverändert. Also muss ich nichts über die Beschreibung der Übersetzung in der richtigen Kultur aktualisieren/erstellen/tun.

Meine erste Schätzung ist, in der TranslationCollection-Klasse eine Methode hinzuzufügen, in der ich die Kultur übergeben konnte, den Namen der Eigenschaft zu aktualisieren oder nicht (Beschreibung in diesem Fall) und den Wert der Beschreibung.

Aber als TranslationCollection ist eine Sammlung von abstrakten Objekten mir nicht einmal, ob dies eine gute Idee ist, und wenn es möglich ist.

Wenn jemand einen Rat es haben würde (in der Hoffnung ich klar genug war), es wäre toll!

Antwort

0

beantwortet schließlich meine eigene Frage, und es war ganz einfach.

Ich musste nur den Indexer wie verwenden: myobject.Translations [userLang] .Name = Wert;

Verwandte Themen