gpt4 book ai didi

c# - 没有对系统 IDispose 的隐式引用转换

转载 作者:行者123 更新时间:2023-11-30 13:57:40 24 4
gpt4 key购买 nike

我有一个 UnitOfWork 类,我需要将其编码为通用类,但是当我在我的 Controller 中实例化此类时,出现构建错误“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 类声明私有(private) unitOfWork 对象时抛出错误:

public class PersonController : Controller
{

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

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

//methods ....

最佳答案

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

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

但我认为您希望 UoW 是一次性的,而实体是引用类型。因此,将定义更改为

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

关于c# - 没有对系统 IDispose 的隐式引用转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20236996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com