62,266
社区成员
发帖
与我相关
我的任务
分享
public class UnitOfWork : DbContext, IUnitOfWork
{
/// <summary>
/// 构造方法。
/// </summary>
protected UnitOfWork()
{
}
/// <summary>
/// 构造方法。
/// </summary>
protected UnitOfWork(string nameOrConnectionString)
: base(nameOrConnectionString)
{
}
/// <inheritdoc />
public void Flush()
{
try
{
var i = base.SaveChanges();
}
catch (DbEntityValidationException ex)
{
this.Clear();
List<string> errorMessageList=new List<string>();
foreach (var entityValidationError in ex.EntityValidationErrors)
{
errorMessageList.Add(entityValidationError.Entry.Entity.ToString());
foreach (var validationError in entityValidationError.ValidationErrors)
{
errorMessageList.Add(string.Format("属性({0})引发了一个验证错误:{1}", validationError.PropertyName, validationError.ErrorMessage));
}
}
throw new Exception(string.Join(";\\n", errorMessageList.ToArray()));
}
catch (DbUpdateConcurrencyException ex)
{
throw new OptimisticConcurrencyException();
}
}
/// <inheritdoc />
public void Clear()
{
base.ChangeTracker.Entries()
.ToList()
.ForEach(entry => entry.State = EntityState.Detached);
}
}
public class Repository<TUnitOfWork, TAggregateRoot, TId> : IRepository<TAggregateRoot, TId>
where TUnitOfWork : UnitOfWork
where TAggregateRoot : class, IAggregateRoot<TId>
{
private readonly UnitOfWork _unitOfWork;
/// <summary>
/// 构造方法。
/// </summary>
protected Repository(TUnitOfWork unitOfWork)
{
_unitOfWork = unitOfWork;
}
/// <inheritdoc />
public bool Contains(TAggregateRoot item)
{
return _unitOfWork.Entry(item).State != EntityState.Detached;
}
/// <inheritdoc />
public void Save(TAggregateRoot item)
{
this.BeforeSave(item);
_unitOfWork.Set<TAggregateRoot>().Add(item);
}
/// <summary>
/// 模板方法子方法。
/// </summary>
protected virtual void BeforeSave(TAggregateRoot item) { }
/// <inheritdoc />
public void Update(TAggregateRoot item)
{
_unitOfWork.Entry(item).State = EntityState.Modified;
}
public void Delete(TAggregateRoot item)
{
_unitOfWork.Entry(item).State = EntityState.Deleted;
}
public void Merge(TAggregateRoot item)
{
var persistItem = _unitOfWork.Set<TAggregateRoot>().Find(item.Id);
_unitOfWork.Entry(persistItem).CurrentValues.SetValues(item);
}
public void Detach(TAggregateRoot item)
{
_unitOfWork.Entry(item).State = EntityState.Detached;
}
public void Attach(TAggregateRoot item)
{
_unitOfWork.Entry(item).State = EntityState.Unchanged;
}
public TAggregateRoot Load(TId id)
{
return _unitOfWork.Set<TAggregateRoot>().Find(id);
}
public void Refresh(TAggregateRoot item)
{
_unitOfWork.Entry(item).Reload();
}
public DbSet<TAggregateRoot> Set<TAggregateRoot>() where TAggregateRoot : class
{
return _unitOfWork.Set<TAggregateRoot>();
}
public IUnitOfWork UnitOfWork
{
get
{
return _unitOfWork;
}
}
/// <summary>
/// 数据库上下文。
/// </summary>
protected DbContext DbContext
{
get
{
return _unitOfWork;
}
}
}
public class Service<TUnitOfWork,TRepository >
{
public TRepository Repository
{
get
{
if (null == _repository)
{
_repository = UnitOfWork.CreateRepository<TRepository>();
}
return _repository;
}
}
protected TUnitOfWork UnitOfWork
{
get
{
return Service<TUnitOfWork>();
}
}
public void Create(TAggregateRoot aggregate)
{
this.Repository.Save(aggregate);
this.UnitOfWork.Flush();
}
}
registry.RegisterType(IUnitOfWorkType,UnitOfWorkType, LifeStyle.Singleton);
//改成
registry.RegisterType(UnitOfWorkType, LifeStyle.Singleton);
就可以了。