Patrón de repositorio con Linq a SQL usando IoC, inyección de dependencia, unidad de trabajo

Parece que hay muchos ejemplos sobre la implementación de un patrón de Repositorio para Linq a SQL. La mayoría de ellos con IRepository y DI; Algunos han implementado la Unidad de Trabajo y otros no. Intenté leer como la mayoría de los resultados devueltos por las búsquedas en SO y Google en Linq para los patrones de repositorio de SQL. Sin embargo, todavía no he encontrado una solución completa.

De mis lecturas he implementado un patrón de repositorio como se muestra a continuación:

Estoy usando DI para registrar interfaces en las que se dependen los repositorios:

this.container.RegisterType<IConnectionStringFactory, ConnectionStringFactory>(new ContainerControlledLifetimeManager(),
    new InjectionConstructor(connectionString));
this.container.RegisterType<IDataContextFactory, DataContextFactory>();

Implementación del patrón Repository:

public interface IPrivilegeRepository : IRepository<PrivilegesEntity>
{
   IList<MenuModel> GetRootMenu();
   IList<MenuModel> GetChildMenu(int parentId);
}

public class PrivilegeRepository : Repository<PrivilegesEntity>, IPrivilegeRepository
{
    #region IPrivilegeRepository Members

    public IList<MenuModel> GetRootMenu()
    {
        return FindAll(menu => menu.ParentId == null)
            .OrderBy(menu => menu.SortOrder)
            .Select(c => EntityMapper.Privileges.ToBusinessObject(c))
            .ToList();
    }

    public IList<MenuModel> GetChildMenu(int parentId)
    {
        return FindAll(menu => menu.ParentId == parentId)
            .OrderBy(menu => menu.SortOrder)
            .Select(menu => EntityMapper.Privileges.ToBusinessObject(menu))
            .ToList();
    }

    #endregion

    public PrivilegeRepository(IDataContextFactory dataContextFactory)
        : base(dataContextFactory)
    {
    }
}

Interfaz genérica IRepository:

public interface IRepository<T> where T : class
{
    IEnumerable<T> All();
    IEnumerable<T> FindAll(Expression<Func<T, bool>> exp);
    T Single(Expression<Func<T, bool>> exp);
    T First(Expression<Func<T, bool>> exp);
}

La clase de repositorio se implementa de la siguiente manera con implementaciones de IRepository (no se muestra) y tiene una dependencia en IDataContextFactory de la cual DI se está encargando:

public class Repository<T> : IRepository<T> where T : class
{
    public Repository(IDataContextFactory dataContextFactory)
    {
        this.dataContextFactory = dataContextFactory;
    }
}

Los repositorios se consumen usando IoC:

PrivilegeRepository repository = container.Resolve<PrivilegeRepository>();

Estoy devolviendo el resultado de las consultas como una colección de Business Object para evitar la dependencia de Linq a SQL en las capas de aplicación donde consumo el repositorio. El escenario anterior funciona bien con mi aplicación WPF que usa el patrón MVVM. Tengo clases de ViewModel aks Presenter que no dependen de clases generadas por Linq-SQL.

¿Cómo extiendo este patrón para poder guardar datos en la base de datos? Me gustaría devolver Business Objects al repositorio y guardarlos. ¿Es posible? ¿Cómo puedo implementar la Unidad de Trabajo en tal escenario?

Respuestas a la pregunta(2)

Su respuesta a la pregunta