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();
}
}