zoukankan      html  css  js  c++  java
  • 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();
    
            }
    


    回到目录
  • 相关阅读:
    maven报错【Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.6 or one of】
    Srping框架中使用@query注解实现复杂查询
    FreeMarker自定义TemplateDirectiveModel
    SpringMVC和Freemarker整合,带自定义标签的使用方法
    关于FreeMarker自定义TemplateDirectiveModel
    滑块验证码【插件待研究】
    注册页面 注册码【欠缺较多 待完善】
    IO流-文件的写入和读取
    Date、String、Calendar相互转化
    Runtime类
  • 原文地址:https://www.cnblogs.com/lori/p/2115982.html
Copyright © 2011-2022 走看看