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