[entity-framework] Entity Framework Code Primo elenco <stringa> Mappatura proprietà



Answers

Una terza opzione sarebbe quella di eseguire la serializzazione usando JSON.NET.

Ho eseguito alcuni test delle prestazioni per gli scenari di scrittura utilizzando le 3 opzioni elencate in questo thread (serializzazione Split String, JSON.NET e introduzione di un'entità) e ho scoperto che JSON.NET offre le migliori prestazioni.

Risultati preliminari di scrittura di 200 entità uguali ( vedi il codice sorgente qui ed esegui il test tu stesso ):

  • Tempo di scrivere entità usando serializzatore di stringhe: 896 millisecondi
  • Tempo di scrivere entità usando json serializer: 516 millisecondi
  • Tempo di scrivere entità usando più entità: 706 millisecondi

Esempio con serializzatore JSON:

public class VariableJson
{
    public string Name { get; set; }

    public int Id { get; set; }

    public virtual IList<string> TextOptions
    {
        get
        {

            return _TextOptions;

        }
        set
        {
            _TextOptions = value;
        }
    }

    private IList<string> _TextOptions;

    public string TextOptionsSerialized
    {
        get
        {
            return JsonConvert.SerializeObject(_TextOptions);
        }
        set
        {
            _TextOptions = JsonConvert.DeserializeObject<IList<string>>(value);                    
        }
    }
}
Question

Sto lavorando per la prima volta con Entity Framework Code. Ho un modello semplice:

public class Variable
{
    public string Name { get; set; }

    public int Id { get; set; }

    public IList<string> TextOptions
    {
        get;
        set;
    }
}

Ho TextOptions problemi con la proprietà TextOptions di tipo List<String> .

Quando provo a farlo in Entity Framework, non mappa.

Ho trovato una soluzione qui () che corregge il mio problema. Fondamentalmente rileggo la mia classe in modo che tenga la lista e la renda una stringa delimitata che viene invece mantenuta:

public class Variable : IVariable
{
    public string Name { get; set; }

    public int Id { get; set; }

    public virtual IList<string> TextOptions
    {
        get
        {

            return _TextOptions;

        }
        set
        {
            _TextOptions = value;
        }
    }

    private IList<string> _TextOptions;

    public string TextOptionsSerialized
    {
        get
        {
            return String.Join(";", _TextOptions);
        }
        set
        {
            _TextOptions = value.Split(new char[]{';'}, StringSplitOptions.RemoveEmptyEntries).ToList();
        }
    }
}

Questo codice funziona bene. Il problema che ho con questo è che penso che violi Separation of Concern. Non penso che la mia classe modello dovrebbe preoccuparsi di serializzare un elenco di stringhe in modo che il framework Entity possa mantenerlo.

Mi sono imbattuto in un problema simile che funziona in ASP.Net MVC. Ho ricevuto un post dal client che verrebbe mappato su un modello. Ci sono stati alcuni problemi con il modo in cui il modello è stato strutturato rispetto al post. In MVC potrei scrivere un Raccoglitore modello personalizzato per gestire la conversione in modo molto sicuro e riutilizzabile.

C'è QUALSIASI modo in cui posso fare questo per Entity Framework che è così pulito come i Raccoglitori di modelli personalizzati sono per MVC?




Links