我已经实现了 EntityFramework 模式以及 Repository 和 Unit Of Work。实现类似于 Code Project Repository Example ,但是我需要对工作单元进行增强。
工作单位
public class GenericUnitOfWork : IDisposable
{
// Initialization code
public Dictionary<Type, object> repositories = new Dictionary<Type, object>();
public IRepository<T> Repository<T>() where T : class
{
if (repositories.Keys.Contains(typeof(T)) == true)
{
return repositories[typeof(T)] as IRepository<T>
}
IRepository<T> repo = new Repository<T>(entities);
repositories.Add(typeof(T), repo);
return repo;
}
// other methods
}
上面的 UoW 是安静的概括,它始终针对父 Repository 类。我有另一个实体,例如学生,它有自己的存储库,扩展了 Repository 类。学生特定存储库有一个方法“GetStudentMarks()”。现在我不能使用通用的工作单元类,因为它总是指向父存储库。
如何实现通用的工作单元来处理这种情况?提前致谢。
最佳答案
您可以使类 GenericUnitOfWork
泛型,指定实体和存储库类型:
public class GenericUnitOfWork<TRepo, TEntity> : IDisposable
where TRepo : Repository<TEntity>
{
// Initialization code
public Dictionary<Type, TRepo> repositories = new Dictionary<Type, TRepo>();
public TRepo Repository()
{
if (repositories.Keys.Contains(typeof(TEntity)) == true)
{
return repositories[typeof(TEntity)];
}
TRepo repo = (TRepo)Activator.CreateInstance(
typeof(TRepo),
new object[] { /*put there parameters to pass*/ });
repositories.Add(typeof(TEntity), repo);
return repo;
}
// other methods
}
这样的事情应该有效。
关于c# - 通用工作单元,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39343750/