編集:これは、リポジトリを使用する大規模なプロジェクトでのみ発生します。CodeFirst アプローチで EF4 を使用し、リポジトリを使用している人はいますか? 教えてください。
やあ。現在、EF4 CodeFirst クラスを使用しています。テスト プロジェクトでは、Author と Book の 2 つのクラスを取得しました (著者は本を取得しました)。私がやろうとしているのは、Author クラスに AddBook があることですが、それをコレクションに追加できないように機能しないようです。ここに私のクラスと 2 つの異なる例外があります。
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);
}
}
例外: コレクションが既に EntityCollection に設定されているため、タイプ 'Author_4CF5D4EE954712D3502C5DCDDAA549C8E5BF02A0B2133E8826A1AC5A40A15D2A' のプロパティ 'Books' は設定できません。
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();
}
}