为什么不能这样做:
public static void Init<TEntity>(params TEntity[] repositories) where TEntity : Entity
{
foreach (TEntity item in repositories)
{
Repository<item> rep = new Repository<item>();
}
}
以上代码无法编译:无法解析符号项
但这行得通:
public static void Init<TEntity>(TEntity entity) where TEntity : Entity
{
Repository<TEntity> rep = new Repository<TEntity>();
}
编辑
我正在编辑 OP 以更全面地了解问题。我们遇到了由多个存储库生成的 Entity Framework Db 上下文的一些问题。目前我们访问存储库如下:
Repository<Product> rep = new Repository<Product>()
Repository<Account> rep = new Repository<Account>()
由于产品和帐户之间存在关系,因此 EF 会提示对象附加到不同的上下文。因此,我们试图通过将存储库访问整合到工作单元模式中来解决这个问题:
这是我正在尝试实现的示例:
public class UnitOfWork
{
protected List<Entity> Repositories = new List<Entity>();
private readonly DbContext _context;
protected UnitOfWork()
{
_context = new SqlDbContext();
}
public static UnitOfWork Init<TEntity>(params TEntity[] repositories) where TEntity : Entity
{
UnitOfWork uow = new UnitOfWork();
foreach (TEntity item in repositories)
{
Repository<item> rep = new Repository<item>();
uow.Repositories.Add(rep);
}
return uow;
}
public IRepository<T> GetRepository<T>() where T : Entity
{
return Repositories.OfType<T>().Single();
}
}
因此我们可以像这样访问我们的存储库:
GetRepository<Product>().GetById(1);
GetRepository<Account>().GetById(123434);
请您参考如下方法:
item是一个类型的实例,但您需要一个类型参数来创建您的泛型 Repository<T> 的实例类。
