Not quite sure what do you mean by Aggregate Root. As far as I know the Repository Pattern usually works with a cluster of objects that are part of your domain model, in DDD this usually refers as aggregates. How do you access you objects from a repository depends on what kind of data access layer you use in you application. I usually use NHibernate as and ORM that manages all the relationships between my classes and database tables, so when I implement a repository I can use any objects that are a part of my domain and access them as needed.
Here is an example of a repository that uses different objects:
public interface IStoryRepository : IRepository<Story>
{
List<Image> GetStoryImage(int id);
List<FacebookUser> GetFbUserById(string id);
}
public class StoryRepository : Repository<Story>, IStoryRepository
{
public List<Image> GetStoryImage(int id)
{
var criteria = Session.CreateCriteria(typeof(Image))
.Add(Restrictions.Eq("Id", id))
.SetResultTransformer(new DistinctRootEntityResultTransformer());
return criteria.List<Image>() as List<Image>;
}
public List<FacebookUser> GetFbUserById(string id)
{
var criteria = Session.CreateCriteria(typeof(FacebookUser))
.Add(Restrictions.Eq("Id", id))
.SetResultTransformer(new DistinctRootEntityResultTransformer());
return criteria.List<FacebookUser>() as List<FacebookUser>;
}
}