EDIT: Это происходит только в проектах с крупными проектами с репозиториями. Есть ли кто-нибудь, использующий EF4 с использованием CodeFirst и использующий репозитории? Пожалуйста, сообщите мне.
Привет. Im в настоящее время работает с EF4 CodeFirst Classes. В моем тестовом проекте я получил два класса: "Автор и книга" (автор получил книги). То, что я пытаюсь сделать, это то, что у меня есть AddBook в моем классе Author, но это не работает, как будто я не могу добавить его в коллекцию. Вот мои классы и два разных исключения.
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);
}
}
Исключение: свойство "Книги" по типу "Author_4CF5D4EE954712D3502C5DCDDAA549C8E5BF02A0B2133E8826A1AC5A40A15D2A" не может быть установлено, поскольку коллекция уже установлена в EntityCollection.
Я меняю класс Author на этот
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);
}
}
Исключение: ссылка на объект не установлена экземпляр объекта.
не может быть задано, поскольку коллекция уже установлен в EntityCollection.
И это естественно, что я получаю это исключение, потому что коллекция не установлена в новую, но тогда я получаю это первое исключение. так как это делается с первым кодом в EF?
Возможно, я должен добавить, что мой может столкнуться с моим 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();
}
}