Rather than create a repository per entity type, you may want to create one per unit-of-work. Otherwise you are going to be creating a lot more work for your self than needed.
By unit of work, I mean a related set of entities. An example might be employees, the primary entity is Employee, but you also may have contacts, addresses, and other such related entities.
This is what I do:
public abstract class RepositoryBase<T> : IRepository
where T : EntityManager
{
}
then I would create an IEmployeeRepository that might look like this:
public interface IEmployeeRepository : IRepository
{
INotifyCompleted GetEmployee(Guid employeeId, Action<Employee> onSuccess, Action<Exception> onFail);
INotifyCompleted GetEmployeeHistory(Guid employeeId, Action<IEnumerable<EmployeeHistory>> onSuccess, Action<Exception> onFail);
}
public class EmployeeRepository :RepositoryBase<MyEntities>, IEmployeeRepository
{
public INotifyCompleted GetEmployee(Guid employeeId, Action<Employee> onSuccess, Action<Exception> onFail)
{
}
public INotifyCompleted GetEmployeeHistory(Guid employeeId, Action<IEnumerable<EmployeeHistory>> onSuccess, Action<Exception> onFail)
{
}
}
DevForce Caliburn is a great framework to look at, I believe they have examples very similar to this.