Código Adicionando primeiro às coleções? Como usar o Code First com repositórios?

EDIT: Isso acontece apenas em projetos de maior escala com repositórios. Alguém está usando o EF4 com a abordagem CodeFirst e usando repositórios? Aconselhe-me por favor.

Oi. Atualmente, estou trabalhando com as classes EF4 CodeFirst. No meu projeto de teste, recebi duas classes, Autor e Livro (o autor recebeu livros). O que estou tentando fazer é que tenho um AddBook na minha classe Author, mas parece que não funciona. Não posso adicioná-lo à coleção. Aqui estão minhas classes e duas exceções diferentes.

 public class Book
{
    public virtual int BookId { get; set; }
    public virtual string Title { get; set; }
    public virtual Author Author { get; set; }
}

public class Author
{
    public virtual int AuthorId { get; set; }
    public virtual string Name { get; set; }
    public virtual ICollection<Book> Books { get; set; }

    public Author()
    {
        Books = new Collection<Book>();
    }

    public void AddBook(Book book)
    {
        book.Author = this;
        Books.Add(book);
    }
}

exceção: A propriedade 'Livros' no tipo 'Author_4CF5D4EE954712D3502C5DCDDAA549C8E5BF02A0B2133E8826A1AC5A40A15D2A' não pode ser definida porque a coleção já está definida para um EntityCollection.

Eu mudo a classe Author para esta

public class Author
{
    public virtual int AuthorId { get; set; }
    public virtual string Name { get; set; }
    public virtual ICollection<Book> Books { get; set; }

    public void AddBook(Book book)
    {
        book.Author = this;
        Books.Add(book);
    }
}

Exceção: referência ao objeto não configurada para uma instância de um objeto.

não pode ser definido porque a coleção já está definida para um EntityCollection.

E é natural que eu receba essa exceção porque a Coleção não está definida como uma nova, mas recebo a primeira exceção. Então, como isso é feito com o código primeiro no EF?

talvez eu deva acrescentar que o meu pode colidir com o meu DbSet?

public class EntityContext : DbContext, IUnitOfWork
{
    public DbSet<Author> Authors { get; set; }
    public DbSet<Book> Books { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.IncludeMetadataInDatabase = false;
    }

    public void Save()
    {
        SaveChanges();
    }
}

questionAnswers(2)

yourAnswerToTheQuestion