
本文共 6135 字,大约阅读时间需要 20 分钟。
���������������Entity Framework������CRUD���������������������������������������������������NoTracking���������������������������������������������
//������DB First������������������������aTestEntities db = new aTestEntities();db.Companies.MergeOption = MergeOption.NoTracking;//������CODE First���Model First������������������������aTestEntities db = new aTestEntities();db.Companies.AsNoTracking();
������������NoTracking���������������������������������������������CUD������������������������������������������������
���������������������������������������������������������������������������������������������������������������������������
������������������������NoTracking������������������������������������������Detached,���������������CRD���������������������Attach���������������������������������������������������������������������������������������������������������������������������������CRD������������Detached������������������������Attach���������������������������������������������������
������������������Attach������������������������������������������������������������������Attach������������Attached������������������������������Attach���������EF���������������������������������������������������������������������������IsAttached������������������������������������������������
������������������DB First���������������������������������EntityObject���������������������������EntityObject.EntityKey���������������������
////// ������entity������������Attached /// /// ///public bool IsAttached (TEntity entity) where TEntity : EntityObject { ObjectStateEntry entry = null; if (dbContext.ObjectStateManager.TryGetObjectStateEntry(entity.EntityKey, out entry)) { if (entry.State != EntityState.Detached) { return true; } } return false; }
������������������Model First���Code First������������������������������������������������������������������������EntityObject���������������������������������������������������������������������������������������������������������������������������������������IEntityWithId������������������������������������������������,���������������������������������������������
public interface IEntityWithId { Guid Id { get; set; } } public class EntityClass : IEntityWithId { Guid Id { get; set; } //...������������ }////// ������entity������������Attached /// ////// /// public bool IsAttached (TEntity entity) where TEntity : IEntityWithId { TEntity localEntity = dbContext.Set ().Local.Where(t => t.Id == entity.Id).FirstOrDefault(); if (localEntity != null) { if (dbContext.Entry(localEntity).State != EntityState.Detached) { return true; } } return false; }
������������������Model First���Code First���������������������������������������������������������������������������������IsAttached���������������������������������������VS Debug������������������������������������������������������������������������������������������������EntityWrapperWithoutRelationships<TEntity>������������������������������������������_entityWrapper������������������������������������������������������EntityWrapper������������������������EntityKey������������������������������������EntityObject.EntityKey���������������������������������������������������EntityKey������������������������������������������������������������������������������������������������EntityWrapperWithoutRelationships���EntityWrapper������������������������internal,������������������������������������������������������������������������������������������������������������������������������������������������������������
////// ������entity������������Attached /// /// ///private bool IsAttached(TEntity entity) { var objectContext = ((IObjectContextAdapter)this.baseContext).ObjectContext; ObjectStateEntry entry = null; if (objectContext.ObjectStateManager.TryGetObjectStateEntry(GetEntityKey(entity), out entry)) { if (entry.State != EntityState.Detached) { return true; } } return false; } /// /// ���������������������������������EntityKey /// /// ///private EntityKey GetEntityKey(TEntity entity) { var entityWrapper = entity.GetType().GetField("_entityWrapper").GetValue(entity);//������������_entityWrapper������ var entityWrapperType = entityWrapper.GetType();//��������������������� var entityKey = entityWrapperType.GetProperty("EntityKey").GetValue(entityWrapper, null);//������EntityKey������������ return (EntityKey)entityKey; }
���������IsAttached���������������������������������������������������������Attach���������������������������������������������������������������������������������������������IsAttached���������������������������������Attached���������������Attach���������������������������������������
public virtual void Update(TEntity entity, bool autoCommit = false) { this.ValidateEntity(entity, false); if (!this.IsAttached(entity)) { this.objectSet.Attach(entity); this.baseContext.Entry(entity).State = EntityState.Modified; } if (autoCommit) { this.Commit(); } } public virtual void Remove(TEntity entity, bool autoCommit = false) { if (!this.IsAttached(entity)) { this.objectSet.Attach(entity); } this.objectSet.Remove(entity); if (autoCommit) { this.Commit(); } }
发表评论
最新留言
关于作者
