Example #1
0
        /// <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);
            }
        }
Example #2
0
        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));
        }