我有一个通用类,将扮演存储库的角色,还有第二个类,该第二个类应从构造函数中的通用存储库接收一个对象。
通用类(存储库):
public sealed class Repo<TContext> : IRepo<TContext>, IDisposable where TContext : DbContext, IDbContextFactory<TContext>, new()
{
#region properties
/// <summary>
/// Private DBContext property
/// </summary>
private DbContext _Context { get; } = null;
/// <summary>
/// Determine if Lazy Loading either activate or not
/// </summary>
private bool _LazyLoaded { get; set; }
#endregion
#region Construcors
public Repo(bool LazyLoaded)
{
_Context = new TContext();
_LazyLoaded = LazyLoaded;
_Context.ChangeTracker.LazyLoadingEnabled = LazyLoaded;
}
public Repo(DbContext context,bool LazyLoaded)
{
_Context = context;
_LazyLoaded = LazyLoaded;
_Context.ChangeTracker.LazyLoadingEnabled = LazyLoaded;
}
public Repo(IConfiguration configuration, string connectionString,bool LazyLoaded)
{
_Context = new TContext().GetInstance(configuration, connectionString);
_LazyLoaded = LazyLoaded;
_Context.ChangeTracker.LazyLoadingEnabled = LazyLoaded;
}
#endregion
}
我在第二堂课尝试了什么:
class UOW:IUOW
{
public UOW(Repo<DbContext> repo)
{
}
public void Commit()
{
}
public void RollBack()
{
}
}
但是我遇到了两个错误:
CS0311类型'Microsoft.EntityFrameworkCore.DbContext'不能用作通用类型或方法'Repo'中的类型参数'TContext'。没有从'Microsoft.EntityFrameworkCore.DbContext'到'Microsoft.EntityFrameworkCore.IDbContextFactory <Microsoft.EntityFrameworkCore.DbContext>'的隐式引用转换。
CS0310'DbContext'必须是具有公共无参数构造函数的非抽象类型,以便在通用类型或方法'Repo'中将其用作参数'TContext'
如何配置第二个类的构造函数以从repo泛型类接收对象?
您的代码存在多个问题,但是要避免出现此处涉及的错误,DbContext
它不是非抽象类型,因此不能与new()
泛型约束一起使用。它也没有实现IDbContextFactory
。您可以做几件事。首先将使UOW
通用并匹配相同的通用约束,如下所示:
class UOW<TContext> : IUOW
where TContext : DbContext, IDbContextFactory<TContext>, new()
{
public UOW(Repo<TContext> repo)
{
}
}
第二种方法是使用能够处理所有这些约束的具体类,例如:
class MyContext : DbContext, IDbContextFactory<MyContext>
{
public MyContext CreateDbContext()
{
throw new NotImplementedException();
}
}
class UOW : IUOW
{
public UOW(Repo<MyContext> repo)
// ^^^^^^^^^ Use the new object here
{
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句