Generic interface and implementation of the DAL (repository pattern, unit of work pattern) in C# .NET