编辑:这仅发生在具有存储库的大型项目中。有没有人使用 EF4 和 CodeFirst 方法并使用存储库?请给我提意见。
你好。我目前正在使用 EF4 CodeFirst 类。在我的测试项目中,我有两个课程,作者和书(作者有书)。我想要做的是我的 Author 类中有一个 AddBook,但这似乎不起作用,就像我无法将它添加到集合中一样。这是我的类和两个不同的例外。
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。
我得到那个异常是很自然的,因为 Collection 没有设置为新的,但是我得到了第一个异常。那么如何在 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();
}
}