新しいエンティティをデータベースに保存するときに問題があります。新しいエンティティを保存するたびにDbEntityValidationException
発生します。しかし、変数の値とエンティティのデータ注釈を注意深く見ると、それらすべてに一致します。
データベースを調べたところ、追加しているエンティティではなく、データベースに保存された以前のエンティティに問題があるようです。何らかの理由で、エンティティを追加する前に値を持っていた外部キー フィールドの一部が NULL になりました。
デバッグ中に、これらのエンティティをすべてスキャンしSaveChanges()
ました。メソッドを呼び出す前に、これらのフィールドはそこにあり、null ではありません。次に、を呼び出した後、他のレコードを台無しにする何かを行った可能性SaveChanges()
があるため、検証エラーが発生します。SaveChanges()
これが関係しているかどうかはわかりませんが、新しいエンティティを作成するときに、その新しいインスタンスを作成し、そのプロパティを個別に割り当てます。そのプロパティの一部は、エンティティ フレームワークから取得され、添付されています。そのため、添付プロパティを切り離された新しいオブジェクトに割り当てています。これが奇妙な動作を引き起こしたかどうかはわかりません。抜粋例を次に示します。
Book book = new Book();
book.Title = "The FooBar";
book.Publisher = publisherRepository.Get(1); // will retrieve a Publisher object from EF
bookRepository.Add(book);
....
// under BookRepository class
public void Add(Book book)
{
dbContext.Books.Add(book);
// just to check if the other records are not messed up, I did this and
// check the values in VS Debugger
// At this point, the other records are not yet affected.
var books = dbContext.Books.Include("Publisher").ToArray();
dbContext.SaveChanges(); // error thrown here,
// checking at the validation error, other book
//instances have their Publisher property set to NULL!
}
この問題に対する他の解決策が見つからないので、助けてください。私はEntity Frameworkの初心者です。