/// <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 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; } }
/// <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[] { }); }
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); }
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)); }
/// <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)); }
internal static void ValidateEntitySetInKey(EntityKey key, EntitySet entitySet) { EntityUtil.ValidateEntitySetInKey(key, entitySet, (string)null); }
// Complex types exceptions #endregion internal static void ValidateEntitySetInKey(EntityKey key, EntitySet entitySet) { ValidateEntitySetInKey(key, entitySet, null); }
public void LookupSingletonName_returns_null_when_given_an_empty_string() { Assert.Null(EntityKey.LookupSingletonName("")); }
public void LookupSingletonName_returns_null_when_given_null() { Assert.Null(EntityKey.LookupSingletonName(null)); }