public static void ApplyPropertyChanges <T>(this ObjectContext context, T entity) where T : EntityObject { EdmEntityTypeAttribute entityTypeAttr = (EdmEntityTypeAttribute)Attribute.GetCustomAttribute(typeof(T), typeof(EdmEntityTypeAttribute), false); if (entityTypeAttr == null) { throw new NotSupportedException("T is not an entity."); } context.ApplyPropertyChanges(entityTypeAttr.Name, entity); }
public static void ApplyDetachedPropertyChanges <T>(this ObjectContext db, T entity, Func <T, int> getIdDelegate) where T : EntityObject { var entitySetName = db.DefaultContainerName + "." + entity.GetType().Name; var id = getIdDelegate(entity); var entityKey = new EntityKey(entitySetName, "Id", id); db.Attach(new Department { Id = id, EntityKey = entityKey }); db.AcceptAllChanges(); db.ApplyPropertyChanges(entitySetName, entity); }
public static void AttachUpdated(this ObjectContext obj, EntityObject objectDetached) { if (objectDetached.EntityState == EntityState.Detached) { object original = null; if (obj.TryGetObjectByKey(objectDetached.EntityKey, out original)) { obj.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached); } else { throw new ObjectNotFoundException(); } } }
public static void AttachUpdated(this ObjectContext context, EntityObject objectDetached) { //if (objectDetached.EntityState == EntityState.Detached) if (objectDetached.EntityState == EntityState.Detached || objectDetached.EntityState == EntityState.Modified)//modified by chenyh { object currentEntityInDb = null; if (context.TryGetObjectByKey(objectDetached.EntityKey, out currentEntityInDb)) { context.ApplyPropertyChanges(objectDetached.EntityKey.EntitySetName, objectDetached); //Apply property changes to all referenced entities in context context.ApplyReferencePropertyChanges((IEntityWithRelationships)objectDetached, (IEntityWithRelationships)currentEntityInDb); } else { throw new ObjectNotFoundException(); } } }
public void AttachObject(EntityObject entity) { List <EntityObject> list = new List <EntityObject>(); int maxLevel = 2; int curLevel = 0; AttachObjectRelation(entity, ref list, maxLevel, curLevel); EntityKey key = entity.EntityKey; if (key != null) { GetEntity(key); lbc.ApplyPropertyChanges(entity.GetType().Name, entity); } else { lbc.AddObject(entity.GetType().Name, entity); } //for (int i = 0;i < list.Count; i++) //{ // EntityObject curEntity = list[i]; // try // { // EntityKey key = curEntity.EntityKey; // if (key != null) // { // GetEntity(key); // lbc.ApplyPropertyChanges(curEntity.GetType().Name, entity); // } // else // { // lbc.AddObject(curEntity.GetType().Name, entity); // } // } // catch (Exception ex) // { // } //} }
public static void ApplyDetachedPropertyChanges <T>(this ObjectContext db, T entity, Func <T, int> getIdDelegate) where T : EntityObject { var entitySetName = db.DefaultContainerName + "." + entity.GetType().Name; T newEntity = Activator.CreateInstance <T>(); newEntity.EntityKey = db.CreateEntityKey(entitySetName, entity); Type t = typeof(T); foreach (EntityKeyMember keyMember in newEntity.EntityKey.EntityKeyValues) { PropertyInfo p = t.GetProperty(keyMember.Key); p.SetValue(newEntity, keyMember.Value, null); } db.Attach(newEntity); //db.AcceptAllChanges(); db.ApplyPropertyChanges(entitySetName, entity); }
/// <summary> /// attache entity as unchanged /// </summary> /// <typeparam name="T">entity type</typeparam> /// <param name="context">object context</param> /// <param name="entity">entity to be attached</param> /// <returns>attached entity</returns> public static T AttachExistedEntity <T>(this ObjectContext context, T entity) where T : EntityObject { EdmEntityTypeAttribute entityTypeAttr = (EdmEntityTypeAttribute)Attribute.GetCustomAttribute(typeof(T), typeof(EdmEntityTypeAttribute), false); if (entityTypeAttr == null) { throw new NotSupportedException("T is not an entity."); } string entityFullname = context.DefaultContainerName + "." + entityTypeAttr.Name; entity.EntityKey = new System.Data.EntityKey(entityFullname, from p in typeof(T).GetProperties(System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.Public) where p.GetGetMethod(false) != null let attribute = (EdmScalarPropertyAttribute)Attribute.GetCustomAttribute(p, typeof(EdmScalarPropertyAttribute)) where attribute != null && attribute.EntityKeyProperty select new KeyValuePair <string, object>(p.Name, p.GetValue(entity, null))); context.Attach(entity); context.ApplyPropertyChanges(entityTypeAttr.Name, entity); return(entity); }
public static void AttachUpdated(this ObjectContext context, EntityObject detachedEntity) { if (detachedEntity.EntityState == EntityState.Detached) { object currentEntity; if (context.TryGetObjectByKey(detachedEntity.EntityKey, out currentEntity)) { context.ApplyPropertyChanges(detachedEntity.EntityKey.EntitySetName, detachedEntity); var newEntity = detachedEntity as IEntityWithRelationships; var oldEntity = currentEntity as IEntityWithRelationships; if (newEntity != null && oldEntity != null) { context.ApplyReferencePropertyChanges(newEntity, oldEntity); } } else { throw new ObjectNotFoundException(); } } }
/// <summary> /// Apply changes from the newEntity to the original entity /// </summary> /// <param name="objectContext">ObjectContext instance.</param> /// <param name="originalTrackedEntity">original entity which is tracked by the context.</param> /// <param name="newEntity">newEntity which contains all the changed values.</param> private static void ApplyChangesToEntity(ObjectContext objectContext, object originalTrackedEntity, object newEntity) { ObjectStateEntry objectStateEntry = objectContext.ObjectStateManager.GetObjectStateEntry(originalTrackedEntity); string entitySetName = ObjectContextServiceProvider.GetEntitySetName(objectStateEntry, objectContext.DefaultContainerName); if (objectStateEntry.State == EntityState.Added) { // In the case of batching if we do a PUT after POST in the same changeset, we need to detach and re-add. objectContext.Detach(originalTrackedEntity); objectContext.AddObject(entitySetName, newEntity); } else { #pragma warning disable 618 // Since we use to do this in V1, keeping the same code there. // Apply property changes as specified in the new object. objectContext.ApplyPropertyChanges(entitySetName, newEntity); #pragma warning restore 618 } }