EF架构~终于实现了Update方法的统一

回到目录

首先,由于统一更新需要把原实例复制一份过来,所以要有一个主键统一的功能,而我们知道,不可以把所有表的主键都设置成统一的名称,所以,我们只能从一个虚拟的主键上想办法,这时,为了完成我们的需要,我们应该引进一个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();
 
      }


回到目录
posted @   张占岭  阅读(13112)  评论(14编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
点击右上角即可分享
微信分享提示