首先,由于统一更新需要把原实例复制一份过来,所以要有一个主键统一的功能,而我们知道,不可以把所有表的主键都设置成统一的名称,所以,我们只能从一个虚拟的主键上想办法,这时,为了完成我们的需要,我们应该引进一个IEntity实体的统一接口,它有一个属性,我们使用ID表示,即它是统一实体的主键,由于int类型可以完全转化为string,所以我们把类型定义为string
代码如下:
namespace Entity { /// <summary> /// 实体模块统一接口 /// </summary> public interface IEntity { /// <summary> /// 为了主键统一,而手动设置的 /// </summary> string ID { get; } } }
而userbas这个实体将去实现IEntity这个接口,它的代码就变成了:
public class UserBas : IEntity { public UserBas() { this.Diaries = new List<Diary>(); this.User_Roles = new List<User_Roles>(); } public string UserID { get; set; } public string UserName { get; set; } public string Email { get; set; } public string Password { get; set; } public System.DateTime CreateDate { get; set; } public System.DateTime UpdateDate { get; set; } public int Status { get; set; } public virtual ICollection<Diary> Diaries { get; set; } public virtual ICollection<User_Roles> User_Roles { get; set; } public virtual UserInfo UserInfo { get; set; } #region IEntity Members /// <summary> /// 返回实体的主键 /// </summary> public string ID { get { return UserID; } } #endregion }
基础工作做完后,我们就可以修改EntityRepository.cs这个数据统一操作实现类了,
看它的update部分:
#region IEntityRepository<TEntity> Members public void Update(TEntity entity) { var entry = this._db.Entry(entity); if (entry.State == EntityState.Detached) { var entityToUpdate = DbSet.Find(entity.ID); EmitMapper.ObjectMapperManager.DefaultInstance.GetMapper<TEntity, TEntity>() .Map(entity, entityToUpdate); this.SaveChanges(); } } public void Update(IList<TEntity> list) { throw new NotImplementedException(); }
回到目录