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?