Avatar billede jonas_h Nybegynder
01. april 2009 - 12:25 Der er 2 kommentarer

Brug af reflection sammen med LinQ problemer

Jeg vil lave følgende klasse som kan tage en hvilken som helst linq-entity class og gemme den i den underliggende database:

    public class DataService<Entity> where Entity : class, new()
    {
        public static void Save(Entity entity, string IDProperty)
        {
            using (ModelDataContext db = new ModelDataContext())
            {
                // Type of entity to save
                Type type = typeof(Entity);
                // Check if exists
                // Get value of ID
                var idValue = type.GetProperty(IDProperty).GetValue(entity, null);
                var exists = from obj in db.GetTable<Entity>()
                            where obj.GetType().GetProperty(IDProperty).GetValue(obj,null) == idValue
                            select obj;
                // If not exists
                Entity toSave;
                if(exists.Count() == 0)
                {
                    toSave = new Entity();
                    db.GetTable<Entity>().InsertOnSubmit(toSave);
                }
                else // Exists in data store
                {
                    toSave = exists.First();
                }
                // Goes through all properties
                foreach(PropertyInfo property in type.GetProperties())
                {
                    PropertyInfo entityProp = type.GetProperty(property.Name);
                    var value = entityProp.GetValue(entity, null);
                    toSave.GetType().GetProperty(property.Name).SetValue(entity, value, null);
                }

                // Saves to data store
                db.SubmitChanges();

            }
        }
    }

Håbber koden viser hvad jeg gerne vil.
Når jeg kører dette får jeg en fejl om, at mit linq udtryk (reflection-delen) ikke kan oversættes til SQL.

Kan man på en eller anden måde muliggøre dette?
Avatar billede jonas_h Nybegynder
01. april 2009 - 12:32 #1
Har faktisk lige fundet løsningen på mit problem :)

Ved at skrive: obj.Equals(entity) i linq-sætningen virker det.

Nu er mit problem bare, at den ikke sætter værdierne ved brug af:
toSave.GetType().GetProperty(property.Name).SetValue(entity, value, null);
Avatar billede jonas_h Nybegynder
01. april 2009 - 12:33 #2
Hvilken jeg igen fandt svaret på... Er kommet til at skrive "entity" i stedet for "toSave" i udtrykket.

Hvis I har kritik til min metode og måden at gøre det, er i mere end velkomne til at skriev.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester