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