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 @ 2011-07-25 11:19  张占岭  阅读(13082)  评论(14编辑  收藏  举报