/// <summary> /// Updates changes of the existing entity. /// The caller must later call SaveChanges() on the repository explicitly to save the entity to database /// </summary> /// <typeparam name="TEntity">The type of the entity.</typeparam> /// <param name="entity">The entity.</param> public void Update <TEntity>(TEntity entity) where TEntity : class { EFDbContext dbContext = GetEFDbContext <TEntity>(); System.Data.Entity.Core.Objects.ObjectContext objContext = dbContext.ObjectContext; var fqen = GetEntityName <TEntity>(); System.Data.Entity.Core.EntityKey key = objContext.CreateEntityKey(fqen, entity); object originalItem; if (objContext.TryGetObjectByKey(key, out originalItem)) { System.Data.Entity.Core.EntityKeyMember[] keys = key.EntityKeyValues; foreach (System.Data.Entity.Core.EntityKeyMember keyMember in keys) { PropertyInfo entityKeyProperty = entity.GetType().GetProperty(keyMember.Key); PropertyInfo originalKeyProperty = originalItem.GetType().GetProperty(keyMember.Key); if (entityKeyProperty != null && originalKeyProperty != null) { object originalKeyValue = originalKeyProperty.GetValue(originalItem, null); entityKeyProperty.SetValue(entity, originalKeyValue, null); } } objContext.ApplyCurrentValues <TEntity>(key.EntitySetName, entity); } }
public TEntity GetByKey <TEntity>(object keyValue) where TEntity : class { EFDbContext dbContext = GetEFDbContext <TEntity>(); System.Data.Entity.Core.Objects.ObjectContext objContext = dbContext.ObjectContext; System.Data.Entity.Core.EntityKey key = GetEntityKey <TEntity>(keyValue); if (objContext.TryGetObjectByKey(key, out object originalItem)) { return((TEntity)originalItem); } return(default(TEntity)); }