I realize this post is old but it still remains unanswered, so here it goes:
The key here is that your model is flawed, imo.
Group should be a domain object with a simple read-only collection of 'persons' (members?). Responsibility for retrieving and persisting the Group belongs to the GroupRepository which with load the data from your persistence store and reconstitute the object.
For example:
public class Group
{
private Collection<Person> _persons;
public Group(Collection<Person> persons)
{
if (persons == null)
throw new ArgumentNullException("persons");
_persons = persons;
}
public IEnumerable<Person> Persons
{
get { return _persons; }
}
public void AddPerson(Person p)
{
if (p == null)
throw new ArgumentNullException("p");
_persons.Add(p);
DoSideAffect();
}
}
public class GroupRepository
{
public Group FindBy(Criteria c)
{
// Use whatever technology (EF, NHibernate, ADO.NET, etc) to retrieve the data
var group = new Group(new Collection<Person>(listOfPersonsFromDataStore));
return group;
}
public void Save(Group g)
{
// Use whatever technology to save the group
// Iterate through g.Persons to persist membership information if needed
}
}
Use a dependency injection framework (Spring.NET, MEF, Unity, etc.) and create an IGroupRepository interface which can be injected in your application code to retrieve and persist your Group domain objects.