РЕДАКТИРОВАТЬ: Это происходит только в крупных проектах с репозиториями. Кто-нибудь использует EF4 с подходом CodeFirst и использует репозитории? Пожалуйста, сообщите мне.
Привет. В настоящее время я работаю с 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();
}
}