系统IDispose没有隐式引用转换

时间:2013-11-27 08:10:44

标签: c# generics

我有一个UnitOfWork类,我需要编写为Generic但是当我在我的控制器中实例化这个类时,我得到一个构建错误" ProjectName.Models.Person不能用作类型参数TEntity。从ProjectName.Models.Person到System.IDisposable"没有隐式引用转换。

这是我的工作单元类,它实现了IDisposiable并期望一个TEntity类类型。此类没有构建错误:

public class UnitOfWork<TEntity> where TEntity : class, IDisposable
{
    private RogDataContext context = new RogDataContext();
    private GenericRepository<TEntity> thisRepository;

     public GenericRepository<TEntity> DataRepository
    {
        get {
            if (this.DataRepository == null)
            {
                this.thisRepository = new GenericRepository<TEntity>(context);
                return thisRepository;
            }
            return thisRepository;
        }
    }

     public void Save()
     {
         context.SaveChanges();
     }

     private bool disposed = false;

     protected virtual void Dispose(bool disposing)
     {
         if (!this.disposed)
         {
             if (disposing)
             {
                 context.Dispose();
             }
         }
         this.disposed = true;
     }

     public void Dispose()
     {
         Dispose(true);
         GC.SuppressFinalize(this);
     }
    }
}

这是我的MVC控件,在为Person类声明私有unitOfWork对象时抛出错误:

public class PersonController : Controller
{

    private UnitOfWork<Person> unitOfWork;//<<<< ERROR

    public PersonController()
    {
        this.unitOfWork = new UnitOfWork<Person>();
    }

  //methods ....

1 个答案:

答案 0 :(得分:8)

当前UoW定义要求TEntity(即Person)是一次性的(您已将IDisposable置于泛型类型的约束中)

public class UnitOfWork<TEntity> where TEntity : class, IDisposable

但我认为您希望UoW是一次性的,并且实体是参考类型。所以,将定义更改为

public class UnitOfWork<TEntity> : IDisposable
    where TEntity : class