Beispiel #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);
            }
        }
Beispiel #2
0
        public override T GetById(object id)
        {
            try
            {
                System.Data.Entity.Core.Metadata.Edm.EdmMember key = CurrentObjectSet.EntitySet.ElementType.KeyMembers.SingleOrDefault();

                if (key != null)
                {
                    CurrentContext.MetadataWorkspace.LoadFromAssembly(typeof(T).Assembly);

                    System.Data.Entity.Core.EntityKey e = new System.Data.Entity.Core.EntityKey(this.CurrentContext.DefaultContainerName + "." + typeof(T).Name, key.Name, ConvertionHelper.GetConvertedValue(id, ((System.Data.Entity.Core.Metadata.Edm.PrimitiveType)(key.TypeUsage.EdmType)).ClrEquivalentType));

                    return((T)this.CurrentContext.GetObjectByKey(e));
                }
                else
                {
                    throw new Exception("This object doesn't have a key specified!");
                }
            }
            catch (ObjectNotFoundException)
            {
                return(null);
            }
            catch
            {
                throw;
            }
        }
Beispiel #3
0
        /// <summary>
        /// Get Key
        /// </summary>
        /// <typeparam name="TEntity"></typeparam>
        /// <param name="entity"></param>
        public string[] GetKeys <TEntity>(TEntity entity) where TEntity : class
        {
            EFDbContext dbContext = GetEFDbContext <TEntity>();

            System.Data.Entity.Core.EntityKey key = ((IObjectContextAdapter)dbContext).ObjectContext.CreateEntityKey(GetEntityName <TEntity>(), entity);

            if (key != null)
            {
                return(key.EntityKeyValues.Select(o => o.Key).ToArray());
            }

            return(new string[] { });
        }
Beispiel #4
0
        private System.Data.Entity.Core.EntityKey GetEntityKey <TEntity>(object keyValue) where TEntity : class
        {
            EFDbContext   dbContext  = GetEFDbContext <TEntity>();
            ObjectContext objContext = dbContext.ObjectContext;

            var entitySetName          = GetEntityName <TEntity>();
            var objectSet              = objContext.CreateObjectSet <TEntity>();
            var keyPropertyName        = objectSet.EntitySet.ElementType.KeyMembers[0].ToString();
            var qualifiedEntitySetName = objContext.DefaultContainerName + "." + entitySetName;
            var entityKey              = new System.Data.Entity.Core.EntityKey(qualifiedEntitySetName, keyPropertyName, keyValue);

            return(entityKey);
        }
Beispiel #5
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));
        }
Beispiel #6
0
        /// <summary>
        /// Gets entity by key.
        /// </summary>
        /// <typeparam name="TEntity">The type of the entity.</typeparam>
        /// <param name="keyValue">The key value.</param>
        /// <returns></returns>
        public TEntity GetOneByKey <TEntity>(object item, bool IsGetFromDataSource) where TEntity : class
        {
            EFDbContext   dbContext  = GetEFDbContext <TEntity>();
            ObjectContext objContext = dbContext.ObjectContext;

            object originalItem = null;

            var entitySet = objContext.CreateObjectSet <TEntity>();

            System.Data.Entity.Core.EntityKey key = objContext.CreateEntityKey(GetEntityName <TEntity>(), item);

            if (IsGetFromDataSource)
            {
                entitySet.MergeOption = MergeOption.OverwriteChanges;
                try
                {
                    string predicate = "";
                    List <ObjectParameter> parameters = new List <ObjectParameter>();
                    foreach (var k in key.EntityKeyValues)
                    {
                        predicate = predicate + (predicate == "" ? "" : "&&") + entitySet.Name + "." + k.Key + "==@" + k.Key;
                        parameters.Add(new ObjectParameter(k.Key, k.Value));
                    }

                    TEntity objectReturn = (TEntity)entitySet.Where(predicate, parameters.ToArray()).Execute(MergeOption.OverwriteChanges).FirstOrDefault();
                    //if(objectReturn!=null)
                    //    this._ObjectContext.ApplyCurrentValues<TEntity>(GetEntityName<TEntity>(), objectReturn);
                    return(objectReturn);
                }
                finally { }
            }
            else
            if (objContext.TryGetObjectByKey(key, out originalItem))
            {
                return((TEntity)originalItem);
            }
            return(default(TEntity));
        }
Beispiel #7
0
 internal static void ValidateEntitySetInKey(EntityKey key, EntitySet entitySet)
 {
     EntityUtil.ValidateEntitySetInKey(key, entitySet, (string)null);
 }
Beispiel #8
0
        // Complex types exceptions

        #endregion

        internal static void ValidateEntitySetInKey(EntityKey key, EntitySet entitySet)
        {
            ValidateEntitySetInKey(key, entitySet, null);
        }
Beispiel #9
0
 public void LookupSingletonName_returns_null_when_given_an_empty_string()
 {
     Assert.Null(EntityKey.LookupSingletonName(""));
 }
Beispiel #10
0
 public void LookupSingletonName_returns_null_when_given_null()
 {
     Assert.Null(EntityKey.LookupSingletonName(null));
 }