none
Update a run time di un database con Entity framework RRS feed

  • Domanda

  • Salve

    ho il seguente problema. Dopo aver modellato il mio db tramite un modello edmx, la struttura del db prevede n tabelle tutte relazionate ad una centrale che chiameremo Root. Vorrei fare l'update di una riga della tabella Root (quindi di un EntityObject Root) solo che vorrei che in automatico di aggiornassero tutte le proprietà che vengono mappate in un oggetto di riferimento per la modifica che passo in ingresso al metodo, esempio:

    il mio metodo di update è il seguente:
    private bool Update(Root toSobstitute) 
    {
     Root found = (from e1 in this.context.Root
                      where e1.ObjectId == toSobstitute.ObjectId
                      select e1).First();

    a questo punto vorrei che a run time un metodo aggiornasse nell'oggetto found tutte le proprietà che sono impostate nell'oggetto toSobstitute in modo da poter fare poi il this.context.SaveChanges() e salvare l'aggiornamento su Db
    }

    Esiste un modo?
    Ovviamente tutto questo perchè per fare l'update EntityFramework vuole che tutte le proprietà di cui vogliamo mutare il valore vengano aggiornate una ad una, purtroppo non è possibile fare semplicemente l'assegnamento found = toSobstitute, sono aperta a qualunque soluzione

    Grazie mille per l'aiuto

    Valentina Tavanti

    giovedì 15 novembre 2012 14:33

Risposte

  • Trovata la soluzione
    public static EntityObject Copy(this EntityObject Entity, EntityObject toModify)
            {
                var Type = Entity.GetType();
               
                foreach (var Property in Type.GetProperties(BindingFlags.GetProperty | BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly | BindingFlags.SetProperty))
                {
                    if (Property.PropertyType.IsGenericType && Property.PropertyType.GetGenericTypeDefinition() == typeof(EntityReference<>)) continue;
                    if (Property.PropertyType.IsGenericType && Property.PropertyType.GetGenericTypeDefinition() == typeof(EntityCollection<>)) continue;
                    if (Property.PropertyType.IsSubclassOf(typeof(EntityObject))) continue;
    
                    if (Property.CanWrite)
                    {
                        Property.SetValue(toModify, Property.GetValue(Entity, null), null);
                    }
                }
    
                return (EntityObject)Entity;
            }


    Valentina Tavanti

    • Contrassegnato come risposta Vale820_1 venerdì 16 novembre 2012 09:33
    venerdì 16 novembre 2012 09:33